测试目的
测试被测系统使用不同的垃圾回收方案时的性能表现;
了解各种JVM参数在性能调优时的实际效果;
对遴选出的最优方案进行8小时压力测试并记录测试结果;
测试环境准备
被测程序的运行的软硬件环境:
- D630 4G内存+T7250双核CPU+160G硬盘;
- 操作系统:windowsXP SP3;
- IP:11.55.15.51;
被测程序名称:
- XXX银行采购管理系统V1.1版;
程序部署环境:
- Tomcat6.0.18 for windows;
- Sun JDK1.6.13 for windows;
- Oracle10g for windows(单独运行在另外一台640M笔记本上)
性能测试工具运行的软硬件环境:
- 操作系统:windowsxp sp3
- 浏览器版本:IE7
- IP地址:11.55.15.141
- 性能测试工具:loadrunner9.10
JVM监控工具:
- 使用Jconsole进行图形化监控;
确定JVM在被测系统的机器上最大可用内存:
通过在命令行下用 java -XmxXXXXM -version 命令反复测试发现在11.55.15.51机器上JVM能使用的最大内存为1592M。
录制测试脚本
录制前准备:修改checkcode.java文件,将随机生成的校验码改成一个固定的校验码方便脚本的自动运行,然后将编译好的checkcode.class文件替换发布包中的class文件。
选择典型业务操作进行脚本录制,每个系统的典型业务操作都会不同,需要经过分析统计,选择用户操作频率最高的部分。经过分析后确定的脚本内容为:录制系统登录操作并在登录成功后的主界面上选取一段文字作为验证点。
启动VuGen程序按脚本定义内容进行录制并调试脚本,保证脚本能正常运行。
定义测试场景
虚拟用户数:30
持续运行时间:8小时
虚拟用户加载和卸载方式:同时
性能监控指标:响应时间、吞吐量、成功交易数
执行初步性能测试
使用系统默认的参数执行测试,并记录响应时间、吞吐量已经成功交易数等数据,同时监控JVM的使用情况。
选择调优方案
不同垃圾回收方法测试数据:
并发收集模式,运行时间十分钟后的对内存使用情况:
串行收集模式,运行时间十分钟:
并行收集模式,运行时间十分钟:
30-60:30个并发用户连续运行60分钟的jvm内存变化截图:
在11:36和11:56分发生了两次完全GC(Full GC),因为这时PS Old Gen已经满了,JVM自动对Old Gen中的内存进行了回收。
根据反复的测试并结合被测系统业务特点,最终敲定了使用以下最优方案进行8小时压力测试:
JAVA_OPTS=-server -Xms1024M -Xmx1024M -Xmn128M -XX:NewSize=128M -XX:MaxNewSize=128M -XX:SurvivorRatio=20 -XX:MaxTenuringThreshold=10 -XX:GCTimeRatio=19 -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=0 -XX:-CMSParallelRemarkEnabled -XX:CMSInitiatingOccupancyFraction=70 -XX:SoftRefLRUPolicyMSPerMB=0 –XX:PermSize=256m -XX:MaxPermSize=256m -Djava.awt.headless=true
调优后JVM监控图
30Vusers运行8小时截图:
测试结果分析
对于XX银行采购系统的登录操作来说,将jvm的NewRatio 和SurviorRatio设置成4时,性能表现最好!在此基础上在设置-XX:TargetSurvivorRatio=90和-Xmx1024M后性能也有一定程度的提升。