`
annan211
  • 浏览: 445708 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

高性能硬件上的程序部署策略

    博客分类:
  • jvm
 
阅读更多
  一个15万pv、天左右的在线文档类型网站最近更换了硬件系统,新的硬件为4个cpu,16GB物理内存,操作系统为 64位的 CentOS 5.4 ,Resin作为服务器。
  管理员选用了 64位的 jdk 1.5,通过-Xmx,-Xms 将堆固定在12GB,使用一段时间后,出现了卡B现象,长时间无响应。
  监控发现卡B是由于GC停顿导致的。虚拟机运行在Server模式,默认使用吞吐量优先收集器,一次回收12GB的堆,一次 Full Gc的时间高达 14秒,再加上程序设计的关系,访问文档中需要一次性把文档从磁盘中读取到内存,导致内存中出现很多由文档序列化产生的大对象,这些大对象很多都进入了老年代,没有在Minor GC中清理掉。在这种情况下,即使有12GB的堆,内存也很快会被消耗殆尽,有次导致每隔十几分钟出现十几秒的卡B,令网站开发人员和管理人员感到郁闷。
  这里先不谈眼神讨论程序代码问题,在程序部署上的主要问题显然是过大的堆内存进行回收时带来的城市间的停顿。硬件升级前使用32为系统1.5GB的堆,用户只感到访问网站比较缓慢,但不会发生十分明显的停顿,因此才考虑升级硬件提升程序效能。如果重新缩小给Java堆分配的内存,那么硬件上的投资就浪费了。

   在高性能硬件上部署程序,目前主要有两种方式:
   1 通过 64位 JDK 来使用大内存。
   2 使用若干个32位虚拟机简历逻辑集群来利用硬件资源。
此案例中的管理员才用了第一种部署方式。对于用户交互性强、对停顿时间敏感的系统,可以给Java虚拟机非陪超大堆的前提是有把握把应用程序的Full GC频率控制的足够地,至少要低到不会影响到用户使用,譬如十几个小时乃至一天才出现一次GC,这样可以通过在深夜执行定时任务的方式触发Full GC 甚至自动重启应用服务器来将内存可用空间保持在一个稳定的水平。
   控制Full GC频率的关键是看应用中绝大多数对象是否符合“朝生夕灭”的原则,即大多数对象的生存时间不应当太长,尤其是不能产生成批量的、长生存时间的大对象,这样才能保障老年代空间的稳定。
   在大多数网站形式的应用里,主要对象的生存周期都应该是请求级或页面级的,会话级和全局级的长生命对象相对很少。只要代码写的合理,应当都能实现在超大堆中正常使用而没有Full GC,这样的话,使用超大堆内存时,网站相应的速度才比较有保证。除此之外,如果读者计划使用64位的JDK来管理大内存,还需要考虑下面可能面临的问题:
  1 内存回收导致的长时间停顿。
  2 现阶段,64位JDK的性能测试普遍地域32位JDK。
  3 需要保证程序足够稳定,因为这种应用要是产生堆溢出几乎就无法产生堆转储快照(因为要产生十几GB乃至更大的dump文件),即使产生了快照也几乎无法进行分析。
  4 相同的程序在64位JDK中消耗的内存一般比32位的JDK大,这是由指针膨胀以及数据类型对其补白等因素导致的。
  考虑到以上几点因素,你可能会选择使用若干个虚拟机集群来利用硬件资源,具体做法是子啊一台物理机器上启动多个应用服务器进程,给每个服务器进程分配不同的端口,然后在前端大减一个负载均衡器,以反向代理的方式来分配访问请求。
   这种部署方式可能会遇到下面的问题:
    1 尽量避免节点竞争全局的资源,最典型的就是磁盘竞争,各个节点如果同事访问某个磁盘文件的话,很容易导致IO异常。
   2 很难高效率的利用某些资源池,譬如连接池,一般都是在各个节点上简历自己的独立的连接池,这样有可能导致一些节点池满了而另外一些节点仍有较多空余,尽管可以使用集中式的JNDI,但这有一定的复杂性并且可能带来额外的性能代价。
   3 各个节点仍然不可避免的收到32位的内存限制,在32位window平台中每个进程只能使用2GB的内存,考虑到堆以外的内存开销,堆一般最多只能开到1.5GB。在某些linux  unix 系统(Solaris)可以提升到3GB乃至接近4Gb的内存,但32位中仍然接受最高4GB内存的限制。
   4 大量使用本地缓存的应用,在逻辑集群中会造成大量的内存浪费,因为每个逻辑节点上都有一份缓存,这时可以考虑把本地缓存改为集中式缓存。
  
   重新回到本案例。最后的部署方案调整为简历5个32位JDK的逻辑集群,每个进程按照2GB内存计算(其中堆固定为1.5GB),占用了10GB的内存。另外建立一个Apache服务作为前端均衡代理访问门户。考虑到用户对响应速度比较关心,并且文档服务的主要压力集中在磁盘和内存访问上,CPU 资源敏感度脚底,因此采用CMS 收集器进行垃圾回收。在部署方式调整后,服务在没有出现长时间停顿,速度也有比较大提升。


    感谢周志明启发。
 
分享到:
评论

相关推荐

    java虚拟机调优大师--关于JVM项目程序调优代表性的实例,eclipse优化

    实战:Eclipse运行速度调优。案例分析。高性能硬件上的程序部署策略

    服务器虚拟化部署方案.doc

    建议部署2套存储系统,数据库系统和虚拟化系统各配 置1套高性能光纤存储阵列,每套存储配置双活冗余控制器,提供24GB高速缓存,24块9 00G高性能企业级SAS硬盘,提供21TB的裸容量。存储阵列提供8G高速FC接口,通过2台...

    服务器虚拟化部署方案教程文件.doc

    建议部署2套存储系统,数据库系统和虚拟化系统各配 置1套高性能光纤存储阵列,每套存储配置双活冗余控制器,提供24GB高速缓存,24块9 00G高性能企业级SAS硬盘,提供21TB的裸容量。存储阵列提供8G高速FC接口,通过2台...

    服务器虚拟化部署方案(1).doc

    存储方案 考虑到xx市公安局实际应用,建议部署2套存储系统,数据库系统和虚拟化系统各 配置1套高性能光纤存储阵列,每套存储配置双活冗余控制器,提供24GB高速缓存,24块 900G高性能企业级SAS硬盘,提供21TB的裸...

    服务器虚拟化部署方案(2).doc

    存储方案 考虑到xx市公安局实际应用,建议部署2套存储系统,数据库系统和虚拟化系统各 配置1套高性能光纤存储阵列,每套存储配置双活冗余控制器,提供24GB高速缓存,24块 900G高性能企业级SAS硬盘,提供21TB的裸...

    高并发高负载数据库架构策略!

     一般的小规模的网站采用这种方式,用户量、数据量、并发访问量都比较小,否则单台服务器无法承受,并且在遇到性能瓶颈的时候升级硬件所需要的费用非常高 昂,在访问量增加的时候,应用程序和数据库都来抢占有限的...

    SQL Server 2008高级程序设计 2/6

     20.4 策略上的反规范化  20.5 合理组织存储过程  20.6 使用临时表  20.7 及时更新代码  20.8 注意细节问题  20.9 硬件考虑事项  20.10 小结 第21章 性能优化工具  21.1 优化时机(第二部分)  21.2...

    SQL Server 2008高级程序设计 4/6

     20.4 策略上的反规范化  20.5 合理组织存储过程  20.6 使用临时表  20.7 及时更新代码  20.8 注意细节问题  20.9 硬件考虑事项  20.10 小结 第21章 性能优化工具  21.1 优化时机(第二部分)  21.2...

    iWebshop3.1

    而 iWebShop 则与传统不同,它基于 iWebSI 的高性能越代架构技术平台体系开发,借助 iwebSI 平台的出色设计,iWebShop 站点具有高度的可扩展性和伸缩性,在低成本投入下可瞬间部署至高负载设备集群系统之上,当业务...

    对网络安全防护技术方案探讨.docx

    在一个专门构建的平台上结合高性能硬件和软件来实现低延迟和数千兆位的数据吞吐量性能 2.1 产品与部署方式 本文就Palo Alto Networks 新一代安全防护网关部署方案进行探讨,该产品采用全新设计的软/硬件架构,可在不...

    citrix 中文管理操作手册

    为策略设置较高的优先级 76 确定对连接应用哪些策略 76 检测应用于某一连接的策略 77 解析部分内容符合条件的搜索结果 77 解析部分内容符合搜索条件的搜索结果 77 对具有冲突规则的策略进行故障排除 78 确定最终生成...

    SQL Server 2008高级程序设计 5/6

     20.4 策略上的反规范化  20.5 合理组织存储过程  20.6 使用临时表  20.7 及时更新代码  20.8 注意细节问题  20.9 硬件考虑事项  20.10 小结 第21章 性能优化工具  21.1 优化时机(第二部分)  21.2...

    SQL Server 2008高级程序设计 6/6

     20.4 策略上的反规范化  20.5 合理组织存储过程  20.6 使用临时表  20.7 及时更新代码  20.8 注意细节问题  20.9 硬件考虑事项  20.10 小结 第21章 性能优化工具  21.1 优化时机(第二部分)  21.2...

    Windows Server 2008系统管理视频教程csdn.txt

    9-7使用组策略部署打印机08:09 9-8使用脚本部署打印机13:43 9-9实战:连接网络接口打印机02:58 第10章配置动态磁盘1小时8分钟10节 10-1基本磁盘上的分区06:29 10-2动态磁盘上的卷和卷的类型13:10 10-3添加三个硬盘 ...

    SQL Server 2008高级程序设计 3/6

     20.4 策略上的反规范化  20.5 合理组织存储过程  20.6 使用临时表  20.7 及时更新代码  20.8 注意细节问题  20.9 硬件考虑事项  20.10 小结 第21章 性能优化工具  21.1 优化时机(第二部分)  21.2...

    SQL Server 2008高级程序设计 1/6

     20.4 策略上的反规范化  20.5 合理组织存储过程  20.6 使用临时表  20.7 及时更新代码  20.8 注意细节问题  20.9 硬件考虑事项  20.10 小结 第21章 性能优化工具  21.1 优化时机(第二部分)  21.2...

    构建最高可用Oracle数据库系统 Oracle 11gR2 RAC管理、维护与性能优化

    1.4.2高性能 1.5 RAC软件 1.5.1存储管理软件 1.5.2集群管理软件 1.5.3数据库管理软件 1.6本章小结 第2章 搭建类似生产环境的RAC 2.1搭建环境 2.1.1 RAC的物理结构 2.1.硬件环境 2.1.3软件环境 2.2搭建...

    J2EE系统设计方案(1).doc

    分布式共享数据对象CACHE服务 -- 让开发人员编制高性能的系统,极大提高整体部署的伸缩性。 支持异构环境: J2EE能够开发部署在异构环境中的可移植程序。基于J2EE的应用程序不依赖任何特定 操作系统、中间件、硬件。...

    J2EE系统设计方案.doc

    分布式共享数据对象CACHE服务 -- 让开发人员编制高性能的系统,极大提高整体部署的伸缩性。 支持异构环境: J2EE能够开发部署在异构环境中的可移植程序。基于J2EE的应用程序不依赖任何特定 操作系统、中间件、硬件。...

    VMware服务器虚拟化解决方案详细.doc

    9 2.2 方案拓扑图 10 2.3 方案构成部分详细说明 11 2.3.1 软件需求 11 2.3.2 硬件需求 11 2.4 方案结构描述 11 2.4.1 基础架构服务层 11 2.4.2 应用程序服务层 13 2.4.3 虚拟应用程序层 18 2.4.4 VMware异地容灾技术...

Global site tag (gtag.js) - Google Analytics