為什么要分布式
- jmeter是100%純java開發的程序,虛擬用戶是以線程實現的,在大量并發情況下,很容易出現CPU、內存消耗過大的問題,甚至會出現java內存溢出。
- 一般一臺電腦設置500-600線程數即可,如果超過1000線程,單機電腦就有點過高了,同時也還要關注本機電腦CPU、內存不能超過80%~90%的范圍,否則會導致測試機本身的性能瓶頸,測試結果也會不準確。
分布式測試原理
- 總控機器的節點Jmeter controller,其他產生壓力的機器叫“肉雞”(Jmeter server)
- controller會把腳本發送到Jmeter server上,肉雞不需要準備jmx文件
- 執行的時候,server上只需要把jmeter-server打開就可以了,不用啟動jmeter
- 執行結束后,server會把壓測數據回傳給controller,然后controller匯總輸出報告
- 注意:必須保證主機和肉雞安裝相同的jdk和jmeter
環境部署
- 準備機器:
- 安裝示例:
# 所有機器都需要安裝
apt-get update --fix-missing # 更新源
apt-get install openjdk-8-jdk # 安裝jdk
cd /opt
tar -xvf apache-jmeter-5.6.2.tgz # 假設已經下載了對應版本到該目錄
vim /etc/profile # 將jmeter追加到系統環境變量export JMETER_HOME=/opt/apache-jmeter-5.6.2export PATH=$JMETER_HOME/bin:$PATH
source /etc/profile # 生效
- 檢查java環境
- 檢查jmeter環境
- 更改配置文件
-
master機
進入/opt/apache-jmeter-5.6.2/bin 目錄,按以下配置修改jmeter.properties配置文件
注:remote_hosts 為執行機的ip及端口,多個執行機可通過英文逗號 “,” 進行拼接
server.rmi.ssl.disable=true(關閉SSL傳輸)
-
slave機
進入/opt/apache-jmeter-5.6.2/bin 目錄,修改jmeter.properties配置文件, 只需將server.rmi.ssl.disable=true即可
- 運行
- slave機
進入/opt/apache-jmeter-5.6.2/bin運行jmeter-server
- master機
jmeter -n -t ./sfs.jmx -l ./result.jtl -j ./result.log -r
注意事項
- 進行性能測試前,盡量對Jmeter進行減負,避免運行時間過長,導致Jmeter卡死:
(1)并發線程不要設置太高,建議單機300以下
(2)“察看結果樹”勾選“僅日志錯誤”,盡可能減少jvm內存使用
(3)在壓測時,要禁用諸如View Result Tree這類的監聽器,這類監聽器非常耗內存
(4)用jmeter測試時使用BeanShell腳本獲取隨機參數值,會導致請求時間過長,TPS過低。應改為使用csv讀取參數值,記錄的TPS會更加準確 - Master與各Slave使用的Java、jmeter版本保持一致;
- 若測試計劃中引用了某插件,則Master與各Slave都要包含該插件
- 測試計劃只需要放在Master上,執行時會自動分發到各Slave,不需要每臺Slave復制一份