锁定老帖子 主题:记一次简单压力测试及小调优(b/s)
精华帖 (2) :: 良好帖 (8) :: 新手帖 (1) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-07-14
最后修改:2011-07-22
本系统作为接口适配系统,前有系统,后有系统,在现场集成测试中被测试人员认为性能瓶颈制造者。虽后经测试验证发现,性能瓶颈在C系统,但毕竟出现性能问题,于是准备进行一次测试,在不考虑A,C的情况下我们的系统能达到什么样的一个能力。
用户->A系统->B系统->C系统,B系统为本系统,负责接口适配。 A系统为门户系统,B为本系统负责接口适配,C系统为运营商系统。
现场反馈的情况,在双机(8G内存,CPU*4,具体参数不详)情况下,持续1小时的压力测试,只有200hits/s左右,这与我所想象的差别比较大。
本地测试环境:
硬件配置:CPU E5620 @ 2.40GHz X2(16核),内存 32G 操作系统:CentOS release 5.4(64bit,内核2.6.18) tomcat5.5,jdk1.6 64bit 在未做任何调整情况下,单机跑30分钟200多hits/s
1、因为后端使用tomcat,所以想到的就是把线程数调大,调到1000,发现处理能力稍有上升,但不理想。 2、调整jvm参数,经过几次对新手代参数,垃圾回收算法的测试后,最终使用参数(因现场内存相对小一些,所以这里也尽量也基于现场内存来考虑):
-Xmx4g
-Xms4g
-Xmn1g
-XX:PermSize=128m
-XX:MaxPermSize=128m
-XX:+UseConcMarkSweepGC
-XX:MaxTenuringThreshold=3
-XX:CMSInitiatingOccupancyFraction=85
-Dcom.sun.management.jmxremote.port=8899
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
最后三行为测试监控需要。这个参数并不完美,但相比之前将young设置较大,gc间隔时间相对长,但一次gc开销的时间完全不能接受,达到0.x秒,监控看到的CPU用来处理GC的时间也较明显。改为上述参数后,GC较频繁,但一次开销时间较少,对CPU的影响基本能忽略。
修改上述参数后,单机跑半小时可达到400hits/s,有一些提升,但还未达到目标。 2、visualvm上场,连接远程jvm 8899端口,监控到下图,让我比较意外:
3、因项目情况需要,日志还是需要输出,于是只能在log4j上想办法了,首先将console日志关闭,日志只输出到一个文件中(之前同时输出到指定文件及catalina.out);将写日志缓存设置到8k左右。实测发现,使用AsyncAppender带来的性能提升并不明显。经过这一番折腾,稳定在600hits/s,超过合同所要求的250并发不少。 4、从日志输出上想办法,该输出的输出,不该输出或可以不输出的就不输出,同时继续把log4j输出缓存做了一些修改,改为800k,最终跑下来大概720hits/s,log4j所占cpu也到基本能接受范围。
================================= 分隔线 ================================= 测试补充,当持续加压,维持在900hits/s,大约20多分钟后,数据急速下降,tomcat维持要僵死情况,不知是否是tomcat不堪重负而挂掉?从监控来看,tomcat的worker.await()占用大量cpu,每个http线程都存在大量阻塞,jvm堆耗尽(old),young进行回收都没什么效果了,回收不到内存,最终tomcat停止服务(未见out of menory日志)。见下图(因需要dump内存所以将heap限定为2G,中间次大波动是因为发现不对劲做了次dump)
======================================== 分隔线 resin测试情况 ======================================= 将tomcat换掉使用resin4,使用相同的vm配置参数,测试结果比较可观。 100虚拟用户,持续1小时,结果监测发现平均760hits/s,失败100多个,主要是测试工具原因导致。 监控vm youn gc 1700次左右,约开销16秒,没有发生full gc,gc方面非常可观。测试1小时,内存使用比较平衡,没在大波动,hits也一直比较平衡,维持在750-770左右。 内存使用情况
linux/unix资源监控工具,推荐使用ibm nmon。本人主要做开发,只能记录自己测试的一点小心得。
希望有经验的朋友能分享点经验,谢谢!
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-07-14
最后修改:2011-07-14
楼主用什么测试的啊!!!
|
|
返回顶楼 | |
发表时间:2011-07-14
楼主,你那个图片是用什么工具监控出来的?
|
|
返回顶楼 | |
发表时间:2011-07-14
luey 写道 楼主,你那个图片是用什么工具监控出来的?
jdk自带的visualvm,推荐使用1.3.2版本 |
|
返回顶楼 | |
发表时间:2011-07-15
这个不错的。呵呵。我一直对这些调优比较感兴趣,只是在因为公司本身没这方面要求所以一直没在生产中实践过呵呵~楼中的这篇文章很有启发.
顺便问一下,最开始那张彩色图片也是用的visualvm吗? |
|
返回顶楼 | |
发表时间:2011-07-15
tomcat都出7.0了,换把。性能可以再上一点
|
|
返回顶楼 | |
发表时间:2011-07-15
楼主有心了,涂黑的地方是不是怕别人认出你公司哈。
虽然简单但挺不错。 你们公司QA做测试啊? |
|
返回顶楼 | |
发表时间:2011-07-15
agapple 写道 tomcat都出7.0了,换把。性能可以再上一点
稳定吗? |
|
返回顶楼 | |
发表时间:2011-07-15
michael.softtech 写道 这个不错的。呵呵。我一直对这些调优比较感兴趣,只是在因为公司本身没这方面要求所以一直没在生产中实践过呵呵~楼中的这篇文章很有启发.
顺便问一下,最开始那张彩色图片也是用的visualvm吗? 是visualvm,还是推荐1.3.2的,到oracle上有单独下载的,放到jdk1.6/bin目录下即可。 第一个彩图的heap使用情况比较不理想,隔段时间有个full gc,今天准备换jrokit jdk来看看是不是内存泄露了 |
|
返回顶楼 | |
发表时间:2011-07-15
CentOS 弱弱的问一句 这个是什么操作系统啊
|
|
返回顶楼 | |