一、一臺壓力機的 Jmeter 默認 最大支持 1000 左右的併發用戶數(線程數) ,再大的話,容易形成卡頓、無響應等狀況,這是受限於 Jmeter 其自己的機制和硬件配置(內存、CPU等)
二、因爲 Jmeter 是 Java 應用, 對 CPU 和內存的消耗較大 ,在須要模擬大量併發用戶數時,單機很 容易出現 JAVA 內存溢出的錯誤 ,致使測試腳本自己就有瓶頸java
Java 應用的 jvm 堆內存 heap 受壓力機硬件限制,雖然咱們能夠調整堆內存大小python
cmd 啓用 Jmeter GUI 時,也會有提示
increase Java Heap to meet your test requirements: Modify current env variable HEAP="-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m" in the jmeter batch filelinux
翻譯: 增長 Java 堆內存來知足測試的要求面試
可是單機沒法支撐數以萬計大併發,此時,須要多個壓力機進行分佈式壓力測試,這樣性能瓶頸就不會是咱們的壓力機了服務器
一、測試 5000 併發的場景,但單機只能支持 1000 併發沒法達到 5000
二、經過分佈式(5 臺機器起)能夠模擬 5000 併發網絡
Jmeter 支持分佈式壓測,將須要模擬的大量併發用戶數分發到多臺壓力機,使 Jmeter 擁有更大的負載量,知足真實業務場景(高併發場景)併發
一、確保壓力機不會出現性能瓶頸
二、在後面進行性能分析時,不須要考慮壓力機是否會致使性能瓶頸的主要緣由之一框架
一、Master 是控制機,Slaves 是多個壓力機
二、分佈式測試中,Master 經過命令行將測試腳本分發給全部 Slave
三、Slave 不須要啓動 Jmeter GUI,經過 CLI 模式執行測試
四、Slave 執行完後,會把結果回傳給 Master
五、Master 收集全部 Slave 的結果並彙總成一個結果集jvm
一、壓力機也能夠叫:負載機、代理機、執行機、奴隸機、肉雞....各類各樣的名字,但他們都是 Slave
二、Master 也 能夠 執行 測試腳本, 也 可 以 不執行 只負責管理分佈式
一、一個測試部門有一個部門經理,五個測試小弟
二、有個巨型測試任務由部門經理劃分好模塊後 分發 給五個測試小弟去測試
三、五個小弟測試完,會 各自發送 測試報告給部門經理
四、部門經理把全部測試報告 彙總 成一份,發給公司大佬看
五、而部門經理能夠參與測試,也能夠不參與測試只負責管理部門
Master
一、控制機
二、運行JMeter GUI(控制測試)的機器
Slave
一、壓力機
二、運行 jmeter-server 的機器
三、它從 GUI 接收命令並將請求發送到目標系統
target
須要進行壓力測試的 Web 服務器
控制機和壓力機的 jmeter 要一致
具體體如今
一、jmeter 版本要一致
二、jdk 主版本要一致(1.七、1.8...)
三、jmeter 腳本中,csv 文件要一致
五、jmeter 的插件要一致
六、同一局域網,防火牆開放端口
看主版本便可
主要是數據和路徑要一致
直接將控制機的 jmeter 壓縮包移到每一個壓力機上解壓使用
注意: 壓力機系統不限,能夠是win、mac、linux
將控制機的 jmeter 壓縮包發送到壓力機,解壓
進入 bin 目錄
默認1009
可修改任意端口,但不能已被佔用的哦
和 server_port 保持一致便可, 默認是會幫你保持一致的
默認 false,表明須要認證
設置爲 true,減小沒必要要的麻煩
仍然在 bin 目錄下哦
若是壓力機是 linux 或 mac
./jmeter-server -Djava.rmi.server.hostname=壓力機ip
jmeter-server.bat -Djava.rmi.server.hostname=壓力機ip
一、檢查防火牆是否被關閉,防火牆會影響腳本執行和測試結構收集
二、確認 server_port 的端口 沒有被佔用以及須要對外開放 ,端口占用會致使壓力機報錯
修改 jmeter.properties(下面三步走)
修改 remote_hosts
一、多個壓力機之間用 , 隔開
二、不一樣壓力機 端口能夠不同 ,不須要所有都一致
三、若是控制機也測試則加 127.0 . 0.1 :port ,而後修改 server_port 和 server.rmi.port (和壓力機同樣步驟)
一、用於查看分佈式測試過程當中,每一個壓力機的測試結果
二、若不啓用,在運行過程當中,控制器是 沒法實時看到 壓力機的結果
啓動遠程服務器
這裏會顯示全部 remote_hosts 添加的壓力機
點擊啓動後,查看壓力機
一、若是併發較高,建議將控制機設置爲只啓動測試腳本和收集彙總測試結果
二、分佈式測試中,若是 1S 發送 100 個模擬請求,有 5 個壓力機,那麼須要將腳本的線程數設置爲 20,不然模擬請求數會變成 500,和預期結果相差太大
四、只須要修改控制機的腳本,啓動以後,壓力機執行的就是最新的腳本
針對注意事項二,咱們來看看栗子
設置了 10 個線程
啓動兩臺壓力機的測試結果
一共發出了 20 個請求(10*2)
其實這就是分佈式的好處,若是須要 1000 個併發用戶數,有 10 臺壓力機,每臺壓力機只須要知足 100 個併發用戶數便可
一、若沒有代理,RMI 不能跨子網通訊,所以 JMeter 沒有代理是不行的
二、從 2.9 版本開始,JMeter發送全部剝離了響應數據的結果到控制檯,這使咱們下降了網絡IO的影響,確保監控你的網絡流量,使得網絡不是爭議點
三、在 2-3 GHz 的 CPU 上,單個 JMeter 客戶端根據測試的類型,能夠處理 1000-2000的線程
瞭解更多,加入咱們,642830685,領取最新軟件測試大廠面試資料和Python自動化、接口、框架搭建學習資料!技術大牛解惑答疑,同行一塊兒交流