監控JMeter壓力機的性能
netstat -an | find "TCP" /C
處理過程:
一:調度機master啟動以后,會拷貝本地的jmx文件分發到遠程的slave機器上;
二:slave機器拿到腳本以后啟動命令行模式去執行腳本,對於每台slave機器拿到的腳本都是一樣的,所以如果jmx腳本為50個線程跑3分鍾,那么實際並發就是50*3=150個線程並發跑3分鍾;
三:執行時,slave會把執行獲得的數據結果傳給master機器,master機器會收集所有slave機器的信息並匯總,這樣master機器上就存在一份所有slave機器匯總的數據結果。
注意事項:
一:我們注意到master機器啟動后會拷貝jmx文件到slave機器,所以我們不需要在每台slave機器上也上傳一份jmx,只需要在master機器上上傳一份jmx腳本即可。
二:參數化文件:如果使用csv進行參數化,那么需要把參數文件在每台slave上拷一份且路徑需要設置成一樣的。
三:調度機(master)和執行機(slave)最好分開,由於master需要發送信息給slave並且會接收slave回傳回來的測試數據,所以mater自身會有消耗,所以建議單獨用一台機器作為master。
四:保證每台機器的jmeter版本和插件版本相同,避免造成一些意外問題。
五:分布式測試總樣本數 = 線程數 * 循環次數 * 執行機總數, 樣本計數邏輯為:執行機slave執行的測試腳本是由調度機master分發的,故每台執行機執行的測試腳本都是相同的,故而性能測試總樣 本數 = 測試腳本樣本數 * 執行機總數,而測試腳本樣本數為線程數 * 循環次數
2:說完了原理,現在我們來說如何做jmeter分布式測試
- 在所有需要做分布式的機器上部署java和jmeter,要求需要保證每台機器上部署的jmeter版本相同插件版本也相同,最好部署在同一路徑下(這樣如果有csv參數化比較方便)
jmeter底層用java開發,耗內存、cpu,如果項目要求大並發去壓測服務端的話,jmeter單節點難以完成大並發的請求,這時就需要對jmeter進行分布式測試:
調度機(Controller):主要負責性能測試腳本的分發,及各個執行機(Slave)的測試結果收集匯總,報告產出。
執行機(Slave):主要負責執行性能測試腳本及斷言等(命令行模式執行,無界面),並將執行結果反饋給調度機(Controller),若斷言執行成功則不返回請求響應數據及詳細斷言信息。
比如我部署在
三台執行機(Slave)
192.168.1.161、192.168.1.162、192.168.1.163
調度機(Controller)為:
192.168.5.133
四台機器上,每台機器部署路徑為:D:\apache-jmeter-3.0
一、執行機配置(Slave)
1、JDK版本為 1.7.0_80,配置相應的環境變量
注意:所有的jdk的版本需要一樣,JMeter的版本也需要一樣
2、JMeter版本為 3.0,配置相應的環境變量
3、配置執行機服務器遠程啟動端口
修改3台slave機器
192.168.1.161、192.168.1.162、192.168.1.163壓力機中
%JMETER_HOME%/bin/jmeter.properties文件中server_port端口號為機器未被占用的端口號,一般默 認為1099,此處我修改為7890(可以使用默認端口或者改成其他端口,只要未被占用就行),remote_hosts為127.0.0.1不需要修改
server_port=7890
#server.rmi.localport=1029
修改完成保存,我配置的3台機器為:
192.168.1.161機器(remote_hosts:127.0.0.1、server_port:7890)
192.168.1.162機器(remote_hosts:127.0.0.1、server_port:7890)
192.168.1.163機器(remote_hosts:127.0.0.1、server_port:7890)
4、啟動執行機服務器
管理員執行腳本:JMETER_HOME/bin/jmeter-server.bat 或 JMETER_HOME/bin/jmeter-server,啟動后命令行頁面如下圖所示:
二、調度機配置(Master)
完成slave機器的配置后,此時配置master機器,我的1台master機器為192.168.5.133
注意到由於master機器作為調度機本身會有一定的性能消耗所以我們配置遠程執行機的時候並沒有把master機器配置進去,只配置了3台執行機
從啟動命令行窗口可見,配置的遠程啟動端口已經生效。
jmeter -JthreadNum=100 -Jtime=200 -n -t D:\apache-jmeter-3.0\bin\log.jmx -r -l D:\apache-jmeter-3.0\thinkive\resultReport\jtl\log.jtl