真实性能测试案例之性能分析与报告
今天主要跟大家分享一个曾经所做的真实性能测试的案例,主要为其中性能测试分析报告过程部分,希望能对你以后怎么做性能分析和报告有所帮助。这个案例的测试目的为:在线考试为“XX平台”中的一个重要模块,根据目前业务的需要,需要测试在线考试能否支持100的并发量。
一、场景描述
采取逐步增加用户数(每10分钟增加用户数20人)对在线考试进行并发操作,达到100人为止;当并发数达到100后则继续运行一段时间(30分钟)。
二、测试环境配置
1、测试服务器配置
经前面多轮配置测试及计数器观察分析(考试只为系统性能测试的一个块,前面还有做其它模块的性能测试。当然如果单独测考试系统,也应根据测试结果数据去进行参数调优。),最后确认程序、tomcat、JVM及MySQL最佳参数配置如下:2、服务器软件配置
程序参数设置
jdbc.minPoolSize=50
jdbc.maxPoolSize=1500
jdbc.initialPoolSize=50
jdbc.maxIdleTime=60
tomcat server.xml参数配配置
maxThreads="1000" minSpareThreads="25" maxSpareThreads="75" maxIdleTime="60000" />
maxKeepAliveRequests="1" redirectPort="443" />
JVM参数配置:
-XX:PermSize=64M
-XX:MaxPermSize=128m
-Xms512m
-Xmx1024m
MYSQL参数配置:
max_connections=1500
thread_cache_size=128
back_log=200
三、测试结果分析
1、当并发数为60后,发生500服务器错误,通过计数器监控检查为数据库连接数达到最大值1499
1)并发数与服务器出现错误的关系视图
2)数据库线程连接数与出现错误的关系视图
通过上面两图表分析:在并发数逐步加大过程中发生瓶颈,瓶颈原因为数据库线程连接数达到饱和值1499。
2、调整MYSQL的max_connections=11500后进行测试
调整参数后仍发现mysql的线程数达到1499后就不能继续上升了。确认原因:windows32位系统,一个进程中可用的内存空间只有2G,而默认情况下一个线程的栈要预留1M的内存空间,所以理论上一个进程中最多可以开2048个线程,但是内存不可能完全拿来作线程的栈,所以实际数目要比这个值要小。所以1499则为该测试环境的线程数峰值。
3、根据前面压力结果,调整并发数为40进行测试
发现当提交试卷数达到1300左右时,数据线程仍然达到1499,最后再次提交试卷发生服务器500错误。都是在发现错误后停止测试(并发40时是一发现500错误现象则停止运行,所以失败数为1),考试流程各事务通过量统计情况如表:
根据上表分析:当短时间内(如30分钟),学生考试提交的试卷次数超过1300左右,当其它学生提交试卷时或进行其它与数据库相关操作时,会出现服务器500错误。