首页 | 互联网 | IT动态 | IT培训 | Cisco | Windows | Linux | Java | .Net | Oracle | 软件测试 | C/C++ | 嵌入式开发 | 存储世界 | 服务器
网络设备 | IDC | 安全 | 求职招聘 | 数字网校 | 网页设计 | 平面设计 | 技术专题 | 电子书下载 | 教学视频 | 源码下载 | 搜索 | 博客 | 论坛
中国IT实验室Linux频道
中国IT教育
Google
首页 资讯动态 认证考试 新手入门 核心技术 高级技术 J2EE J2ME Java&XML 开源技术 其他技术 RSS订阅 论坛 专题
您现在的位置: 中国IT实验室 >> Java >> J2EE >> EJB >> 正文

优化 Java 垃圾收集器改进系统性能

解决方法

    当前的GC发生的频率和每次所花的时间还算正常,但是如果每次GC所花的CPU时间能减少,就能空出系统更多的能力处理任务池里的任务,用以降低任务池中的任务数,使得Q值基本上位于任务池的限额以下,这样可以提高在超负荷下业务请求的总的成功率。

    当前Java Virtual Machine的配置为: Initial Heap Size:256 , Maximum Heap Size: 3072。相对而言, Maximum Heap Size设的有点偏大。对于不同的应用程序,最优化堆大小的设置都有可能不同。堆设置变大,GC的频率会降低,应用程序会运行更长的时间后,才会进行GC,带来的就是每次GC也会花更长的时间。从而GC调用占用系统更长的时间,使系统没有足够的能力处理请求,使得此刻任务池中的任务累积很多,Q值很大,形成很高的峰值,超过流量控制的限额,超过限额数的任务被流量控制给直接丢弃,从而导致总的成功率不高。

    因此,必须降低堆大小,使得GC的频率增大,每次GC所花时间降低,从而降低Q的峰值,使之位于系统的流量控制的范围之内,从而提高业务请求的总的成功率。

    当前的流量控制所允许的峰值是450,因此我们需要通过试验来验证,堆大小降低到什么值时,Q值的峰值将低于450,以保证总的成功率。 同时在峰值低于450的条件下,什么样的堆大小设置可以让系统的性能最佳。 因为如果堆设置过小,会使得对象可分配空间变小,从而会频繁的使用垃圾收集机制来释放内存空间,而每次垃圾收集,都会耗用一定的系统资源。所以,我们要通过试验和监控数据,设法使的我们所设置的堆大小能够使得我们的程序运行最优化。

    通过多次试验,我们得出结论:当Java Virtual Machine的配置为: Initial Heap Size:512 , Maximum Heap Size: 1024时,该系统性能最佳。

    从WebSphere Administrative Console上,依次点击Servers->Application Servers,然后选择需要的server,接着点击Process Definition->Java Virtual Machine,而后在那里设置Initial Heap Size:512和Maximum Heap Size: 1024。这时的配置对于该应用系统相对较为合理。这时再次分析3分钟内的GC的数据,从下图可以看出,GC的周期缩短了,每1-2秒就会发生一次GC,但是每次GC所花费的CPU时间降低了,平均130ms左右。


图五 改进JVM配置后的GC分析图
图五 改进JVM配置后的GC分析图

    相应地,在JVM配置改进后,对任务池的Q值再进行一次采样,并且和改进前的采样值进行比价,采样图如下图六所示,改进后任务池的Q值分布在50-450之间,数值的起伏相对改进前要均衡些。不再出现忽然间Q值大小涨到500以上的情况,基本在流控的限制范围之类,进而提高了在超负荷下业务请求的总的成功率。


图六 改进JVM配置后和改进前的Q值采样比较图
图六 改进JVM配置后和改进前的Q值采样比较图

上一页  [1] [2] [3] 

【责编:Peng】

中国IT教育

相关产品和培训
文章评论
 友情推荐链接
 认证培训
 专题推荐

 ·关于Java框架技术专题
 ·XML全攻略技术专题
 ·JAVA开源技术介绍专题
 ·Java嵌入式开发之J2ME技术专题
 ·超前体验 Oracle 11g的5个新特性…
 ·揭密使用VB.NET的五个实用技巧
 ·Oracle和SQL Server常用函数对比专题…
 ·展现C#世界 C#程序设计专题…
 ·Java入门 Tomcat的配置技巧精华专题…
 ·Oracle RMAN物理备份技术详解…
 今日更新
 社区讨论
 博客论点
 频道精选
 Java 频道导航