你們在使用jmeter壓測過程當中,可能會度遇到內存溢出的錯誤,這是爲何呢?html
由於jmeter是java寫的應用,java應用jvm堆內存heap受負載機硬件限制,雖然咱們能夠調整堆內存大小,java
可是單機沒法支撐數以萬計大併發,此時,須要多個負載機進行分壓測試,這樣性能瓶頸就不會是咱們的負載機了。linux
jmeter分佈式壓測時,選擇其中一臺做爲控制機,其他的機器作爲負載機,apache
執行時,控制機會把腳本發送到每一個負載機上,負載機獲取到腳本就執行腳本(負載機只須要啓動jmeter-server.bat或者jmeter-server),windows
執行後,負載機回傳執行結果給控制機,控制機會進行彙總。值得注意的是:若是請求執行成功,不會回傳請求的響應信息,因此在查看結果樹中, 響應結果看到是空的。安全
http://jmeter.apache.org/usermanual/jmeter_distributed_testing_step_by_step.html服務器
原理圖(截圖自官網)併發
http://jmeter.apache.org/usermanual/jmeter_distributed_testing_step_by_step.htmljvm
看不懂英文的本身翻譯哦,看懂了,少踩坑。分佈式
保證控制機和負載機上jdk、jmeter版本同樣,不然會出一些意外的問題,
關閉防火牆:service iptables stop
能夠先看防火牆狀態,若是是關閉的,就不用管了。
因爲機器數量的緣由,我這裏演示windows既做爲控制機,又做爲負載機,另一臺負載機是個人linux虛擬機。可是控制機會接收負載機回傳的結果數據,因此自身有性能消耗,最好是負載機單獨一臺機器。
另外,這樣有個問題,若是有參數化文件,須要拷貝到每臺負載機上,路徑要同樣,而windows和linux上路徑確定是不同的,因此,負載機要麼都是windows,要麼都是linux,
爲了演示方便,個人腳本就不用參數化文件了,且這裏演示rmi傳輸機制使用ssl方式
bin目錄下執行./jmeter-server
解決辦法:./jmeter-server -Djava.rmi.server.hostname=192.168.116.128
下面提示缺乏jsk文件
不論是負載機仍是控制機(若是控制機也做爲負載機),執行jmeter-server.bat(linux下執行jmeter-server,另外:linux下檢查是否啓動成功:ps -ef | grep jmeter-server),報以下錯,
是由於從JMeter 4.0開始,RMI的默認傳輸機制將使用ssl。SSL須要密鑰和證書才能工做,不使用ssl將存在安全漏洞
在控制機bin目錄下,點擊:create-rmi-keystore.bat
根據提示一直填下去,遇到Yes與No就直接填y,而後回車就ok了
回車後生成文件:rmi_keystore.jks
複製控制機生成的rmi_keystore.jks到每一臺負載機jmeter的bin目錄下
負載機配置文件中,修改端口號
搜索jmeter-server
默認端口1099
端口號修改成2099
執行jmeter-server
控制機telnet負載機,看端口通不通
telnet通了,
控制機配置文件
配置負載機
測試腳本
關於下面的監聽器:查看結果樹,主要是用於調試腳本的時候用,調試好後,把這個監聽器禁用掉
壓測過程當中,能夠看聚合報告,若是有失敗的請求,能夠立刻遠程鏈接服務器查看錯誤日誌
可是,若是沒有遠程服務器的權限,就能夠不由用這個監聽器,可是要勾選「僅錯誤日誌」
3個線程,運行5次,總共15次
遠程啓動linux負載機
取樣器結果
請求
響應數據爲空
並且,哪怕勾選保存結果,查看結果樹中依舊沒有結果,這多是jmeter自己的設置,由於若是回傳大量數據,會影響性能結果
聚合報告,3個線程,運行5次,總共15次
負載機控制檯輸出的信息
以前有羣友問:響應爲空,加了斷言,那是如何斷言的呢?
雖然咱們在查看結果樹中看不到響應,生成的jtl文件,打開也沒有結果,可是,jmeter發了請求後,服務器會把響應結果返給jmeter,jmeter會根據返回自動化進行斷言,和咱們可否看到響應沒有關係。
能夠遠程運行腳本:運行--遠程啓動--壓力機
響應結果爲空
響應頭
改一個不會返回的斷言
遠程運行
查看結果
雖然上面沒有返回結果,可是下圖表示依然作了正確的斷言
控制機ip
修改配置文件,遠程主機加入本機,默認端口1099
執行jmeter-server.bat
telnet本機1099端口
端口不通
上面執行jmeter-server.bat,顯示的是下面192.168.56.1這個地址(由於我本機只連了無線,沒有本地鏈接)
telnet1099端口
能夠通
修改配置文件
保存後重啓jmeter-server.bat、jmeter.bat
只遠程啓動windows負載機
聚合報告
控制檯信息
遠程啓動全部
聚合報告,總樣本數 = 線程數 * 循環次數 * 執行機總數
30 = 3 * 5 * 2
至此,jmeter5.1分佈式壓測環境搭建完成。
而後就能夠設置線程,跑併發了,好比並發200線程,每秒啓動20個線程,併發運行15分鐘
jmeter -n -t 腳本絕對路徑名.jmx -l 要保存的結果絕對路徑名.jtl -H 192.168.116.128 -P 2099
生成jtl結果文件
查看結果樹
聚合報告
jmeter -n -t 腳本絕對路徑名.jmx -l 要保存的結果絕對路徑名.jtl -R 192.168.116.128:2099,192.168.56.1
其實,在實際壓測的時候是有時仍是不使用命令行方式的,由於看不到tps波動狀況(固然,能夠用其它的監控,好比:JMeter+Grafana搭建可視化實時性能測試數據監控)
通常來講,若是有大的波動,是須要當即鏈接服務器查看各個資源的狀況的,好比線程池、鏈接池,
雖然命令行執行完後會生成jtl結果文件,可是壓測完,壓測過程當中建立的各類鏈接都釋放了,也就沒法定位到問題了,
若是有失敗的請求還好點,這樣能夠根據錯誤日誌來分析定位問題
總之,性能測試的重點及難點是:監控、分析、定位、調優。