JMeter自身運行性能優化
by:授客 QQ:1033553122
測試環境
apache-jmeter-2.13
1. 問題描述
單台機器的下JMeter啟動較大線程數時可能會出現運行報錯的情況,或者在運行一段時間后,JMeter每秒生成的請求數會逐步下降,直到為0,即JMeter運行變得很“卡”。
2. 解決方法
1)設置JVM內存
找到JMeter bin目錄下的jmeter.bat文件,notepad等文本工具打開,編輯
找到如下內容,
rem See the unix startup file for the rationale of the following parameters,
rem including some tuning recommendations
set HEAP=-Xms512m -Xmx512m
set NEW=-XX:NewSize=128m -XX:MaxNewSize=128m
set SURVIVOR=-XX:SurvivorRatio=8 -XX:TargetSurvivorRatio=50%
set TENURING=-XX:MaxTenuringThreshold=2
修改帶背景色,文字帶顏色內容如下
set HEAP=-Xms2048m -Xmx2048m
set NEW=-XX:NewSize=640m -XX:MaxNewSize=640m
說明:
-Xms512m:初始化堆內存大小 -Xmx512m:最大堆內存大小,這里的內存大小建議為512的整數倍,可以根據機器實際內存進行合理的設置,建議最大值-Xmx不要超過剩余物理內存的50%
通常會將 -Xms 與 -Xmx兩個參數的配置相同的值,其目的是為了能夠在java垃圾回收機制清理完堆區后不需要重新分隔計算堆區的大小而浪費資源
set NEW=-XX:NewSize=640m -XX:MaxNewSize=640m
1)-XX:newSize:新生代初始內存的大小,應該小於 -Xms的值
2) -XX:MaxnewSize:表示新生代可被分配的內存的最大上限;當然這個值應該小於-Xmx的值,因為新生代占內存來自整個堆內存。為了優化GC(內存垃圾回收),最好設置-XX:MaxnewSize值約等於-Xmx的1/3
注意:jvm在執行GC時,會停止工作。MaxnewSize的增大,可以降低GC頻率,
2)指定測試結果數據存儲文件
如上,JMeter中很多插件都提供了結果文件存儲設置,為了避免請求測試結果數據都存儲到JVM內存(因常駐數據無法回收,量大的話會很快壓垮jmeter),需要為插件指定一個文件,把數據存儲到該文件,測試前務必要進行這類設置檢查。
另外,通常結果文件要保存為CSV格式(比起xml格式,可以少寫入好多數據)
3)針對某些監聽器,設置僅記錄錯誤日志
根據第二點的分析,針對某些監聽器(比如查看結果樹),我們只需關注錯誤日志信息的情況下,需要勾選“僅日志錯誤”,這樣只會保存錯誤日志到內存,數據不會多。
4)通過保存的結果文件“重繪”測試監聽結果圖表
針對一些不需要在測試過程中“實時”查看的測試“監聽器”圖表,可以考慮“線下”生成圖表。具體做法如下所例。
eg:
如上圖,這里添加了監聽器“聚合報告”,插件,因為我們需要查看相關數據,比如吞吐量,請求耗時等,但是我們不需要實時查看結果,所以把對監聽結果“聚合報告”給禁用了(更重要的別因是聚合報告非常消耗CPU。
然后,我們添加了監聽器“Simple Data Writer”,並設置結果數據存放文件(例子中為“測試結果.csv”),如果有必要的話還可以點擊Configure設置需要保存的條目,文件格式等(通常默認設置就可以了)
注:Simple Data Writer:該監聽器可用於記錄測試結果到某個文件,但不提供ui展示。
最后,等測試完成后,我們在插件控制面板中,點擊瀏覽按鈕,打開上述保存的文件,結果如下,可以看到生成的分析數據了。
注意:
1)Log/Display Only: 僅錯誤日志Successes
這里如果勾選了僅錯誤日志,那么記錄數據、展示數據的時候只會記錄/展示錯誤日志,如果勾選了Successes,則只會記錄/展示成功執行的記錄,兩個都不勾選,則默認記錄全部信息。這點針對其它插件也是如此
2)打開保存的數據文件,默認會分析數據文件中的所有內容,所以,每次執行前都應該重新命名結果文件(可以在輸入框中直接輸入新的文件名,或者找到存儲目錄下,備份結果文件后,把結果文件刪了),防止每次測試的數據都寫入到一個文件里,疊加統計了。這點針對其它插件也是如此
3)每次打開保存的結果數據文件之前,要點擊工具欄的 清除、清除全部按鈕,清除展示的數據,否則展示的數據會在上次的基礎上疊加顯示。這點針對其它插件也是如此