今天主要跟大家分享一個曾經所做的真實性能測試的案例,主要為其中性能測試分析報告過程部分,希望能對你以后怎么做性能分析和報告有所幫助。這個案例的測試目的為:在線考試為“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錯誤。