分享
 
 
 

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

王朝java/jsp·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

2006 年 11 月 30 日

在系统的性能测试过程中,当系统的处理能力有某种变化趋势时, 除了关于等待队列、执行线程,EJB 池以及数据库连接池和 Statement Cache 方面的调优外,还要考虑到 java 垃圾收集器(Garbage Collection,本文简称 GC)对系统性能的影响。本文介绍了如何分析系统的处理能力和 GC 之间的关系,以及如何通过改进 JVM 的配置来优化 GC,以提高系统的性能。

项目背景

某个大型项目的 CPU100% 的压力性能测试, 用以检查在系统运行环境不正常的情况下,系统可以运行到何种程度。测试过程是: 请求测试的模拟器向系统不断发出大量请求, 系统接受由模拟器发出的请求,然后将请求置于一个任务池中,假如当前有空闲的线程,则该线程会从任务池中取出一个任务进行处理,假如没有空闲的线程,则该任务一直会待在任务池中,直到有空闲的线程来处理它。因此,任务池的队列的长度从某种意义上可以代表整个系统的处理能力,任务池队列的长度用 Q 值来表示,假如 Q 值超出了一定限额,将会有流量控制的线程将超出限额的待处理任务丢弃,以保证系统的稳定性。

整个测试要求得到系统所在服务器的负载达到将近 100% 时,系统的吞吐量,相应时间以及在超负荷下业务请求成功率。

问题现象描述

在测试过程中,任务池中累积的任务数起伏很大,正常时累积的任务数很小,但是每隔一段时间会累积大量的任务。由于累积的任务数超出任务池流量控制所定义的限额,所以每隔一段时间,大量的待处理任务被清除。因此测试结束后得到的在超负荷下业务请求成功率也不是很理想。

应用服务器的物理部署

一台AIX服务器(4CPU,4GMemory)来部署本Web应用程序;Web应用程序部署在中间件应用服务器上;部署了一个节点(Node),只配置一个应用服务器实例(Instance),没有做Cluster部署。

分析

检测WebSphere application Server上的Web Container,EJB Container , ORB Service,数据库连接池等设置均合理,然后怀疑问题的现象是不是与系统GC有关。当前Java Virtual Machine的配置为: Initial Heap Size:256 , Maximum Heap Size: 3072。

为了验证任务池中累积的任务数的大幅度变化和系统GC是否存在一定的关系,通过对任务池的累积任务数和系统GC进行采样, 将采样后的数据进行分析,用以得出二者的关系。采样时遵循Nyquist采样定例: 采样频率要大于被采集对象的频率的2倍。 否则,采样点很可能每次位于被采集对象的波形的某个点上,从而不能正确反映被采集对象的变化规律。

采样

通过观察,发现任务池的任务数目(以下用Q值代替)的变化周期大概是5到6秒,因此根据Nyquist采样定例,采样的时间间隔不能超过2-3秒,所以按照每秒来采样。 测试时间是3分钟,采样180次,系统的当前负载率是99%。采样图如下所示:

图一 任务池Q值的采样图

由于系流量控制要求的限额是450个任务,也就是任务池中最多能累积450个任务,当任务池中累积的任务数超过450时,多余的任务会被流量控制直接丢弃,从上图可以看出,系统的Q值在很多时刻都大于450,因此多次被丢弃任务,从而导致了任务请求成功率不高。

系统GC的采样

1: 在WebSphere Administrative Console上, 点击进入:Servers, 然后Application servers > server1 > PRocess Definition > Java Virtual Machine, 在Configuration面板上,选上Verbose garbage collection选项。

图二 WebSphere Application Server的JVM配置示图

2:进入<%WebSphere Application Server的安装目录%>/profiles/<%所在的profiles%>/logs/ <%所在的Server%>, 可以看到native_stderr.log文件,将其清空

3:在高负载的条件下,进行高压测试3分钟

4:将native_stderr.log文件拷贝出来,用GCCollector工具进行分析,其中native_stderr.log文件上记录了系统GC的数据。

5:安装GCCollector工具: 下载完GCCollector.zip后,解压缩,将里面Lib里的3个文件 jfreechart-1.0.0-rc1.jar,jcommon-1.0.0-rc1.jar 和GCCollector.jar拷贝至JRE的lib目录下,然后在命令行控制台上进入JRE的安装目录,而后运行: java -classpath jfreechart-1.0.0-rc1.jar;jcommon-1.0.0-rc1.jar -jar GCCollector.jar。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有