今天主要跟大家分享一个曾经所做的真实性能测试的案例,主要为其中性能测试分析报告过程部分,希望能对你以后怎么做性能分析和报告有所帮助。这个案例的测试目的为:在线考试为“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错误。
四、测试结论及建议
测试结论
平台在线考试不支持100的并发数。
性能瓶颈为在一段时间内(如30分钟)学生提交考试次数超过1300左右后,数据连接数达到该服务器允许的峰值1499,导致进行考试以及其它操作时出现500服务器错误。
在该配置服务器环境下,MySQL的max_connections=1500为数据线程数最大设置,超过后并不起作用。
建议
A、尽可能的优化后台处理程序,降低考试业务所需的数据库连接数。
B、在做测试数据过程中发现,当安排考试的以院系为单位(院系用户较多,如2000个),点击“启用”按钮无响应,实际后台已经在做分配考试处理。因此建议优化该功能,如点击启用考试应及时改变状态,同时后台做分配处理。
C、后台分配考试处理方式过慢,建议进行优化,缩短处理时间。
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
如果对你有帮助的话,点个赞收个藏,给作者一个鼓励。也方便你下次能够快速查找。
如有不懂还要咨询下方小卡片,博主也希望和志同道合的测试人员一起学习进步
在适当的年龄,选择适当的岗位,尽量去发挥好自己的优势。
我的自动化测试开发之路,一路走来都离不每个阶段的计划,因为自己喜欢规划和总结,