1. 程式人生 > >Jmeter 多臺機器產生負載及問題解決方法

Jmeter 多臺機器產生負載及問題解決方法

JMeter 使用多臺機器產生負載的操作步驟如下:

  (1)在所有期望執行jmeter作為 負載生成器的機器上安裝jmeter, 並確定其中一臺機器作為 controller ,其他的的機器作為agent 。然後執行所有 agent 機器上的jmeter-server 檔案(假定使用兩臺機器192.168.0.100 和192.168.0.101 作為agent)

  (2)在controller機器的jmeter的bin目錄下,找到jmeter.properties 檔案,編輯該檔案:

  查詢:

  remote_hosts=127.0.0.1

  修改為:

  remote_hosts=192.168.0.100:1099,192.168.0.101:1099

  這裡要特別注意埠後,有些資料說明埠1644為jmeter的controller 和agent 之間進行通訊的預設RMI埠號,但是在測試時發現,設定為1644執行不成功,改成1099後執行通過。另外還要留意agent的機子是否開啟了防火牆等。

  (3)啟動controller 機子上的jmeter應用,選擇選單“執行”--->“遠端啟動”,來分別啟動agent ,也可以直接選擇“遠端全部啟動”來將所有的agent啟動。

注意問題(非常重要):
在分散式的測試中,會遇到很多問題,如:
(1)控制機 連不上 agent 機
解決方法:telnet 192.168.1.117 1099  看IP 埠通不通,如果通 OK,不通,檢查防火牆

(2)agent 機 連不上控制機
檢視 agent 機上,日誌檔案:jmeter-server.log,看具體的報錯提示;另外,檢視 jmeter-server 這個服務繫結該 agent機的IP是否正確,如果繫結的IP不正確,肯能是 C:\Windows\System32\drivers\etc中HOST檔案中設定有問題。

最好的方法就 agent和controller機器都是新安裝的乾淨的機器,不然會有一堆的問題,讓你崩潰。

(3)各個agent和controller機器上的時間必須是同步的,要不然 最後的結果會有差別,這個非常重要。

* 遇到的問題及解決方法

Controller 機(192.168.1.117);Agent 機器(192.168.1.132)
Agent 機 上的jmeter-server已經啟動OK;

遇到的問題:

       啟動remote測試後,Agent 機器 收到任務,且控制檯顯示:”Starting the test on host 192.168.1.132:1099 @ ***“,說明控制機分派上agent機上的測試成功,但是 一直卡在這裡不動了,控制機一直沒有顯示 任務執行狀況以及收到測試結果(任務一直不結束,卡住了)。

解決方法:

(1)telnet 192.168.1.132 1099  是通的,說明 控制機 連agent 機是OK了,問題排除。

(2)檢視 agent機上 c:\apache-jmeter-2.13\bin 中 jmeter-server.log 日誌檔案,發現有錯誤: jmeter.samplers.RemoteListenerWrapper: testStarted(host) java.rmi.ConnectException: Connection refused to host: 169.254.123.36; nested exception is: 
java.net.ConnectException: Connection timed out: connect
at sun.rmi.transport.tcp.TCPEndpoint.newSocket(Unknown Source)
at sun.rmi.transport.tcp.TCPChannel.createConnection(Unknown Source)
at sun.rmi.transport.tcp.TCPChannel.newConnection(Unknown Source)
at sun.rmi.server.UnicastRef.invoke(Unknown Source)
at java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(Unknown Source)
at java.rmi.server.RemoteObjectInvocationHandler.invoke(Unknown Source)
at $Proxy1.testStarted(Unknown Source)
at org.apache.jmeter.samplers.RemoteListenerWrapper.testStarted(RemoteListenerWrapper.java:85)
at org.apache.jmeter.engine.StandardJMeterEngine.notifyTestListenersOfStart(StandardJMeterEngine.java:216)
at org.apache.jmeter.engine.StandardJMeterEngine.run(StandardJMeterEngine.java:336)
at java.lang.Thread.run(Unknown Source)

推斷原因是 agent 連不了控制機,被拒絕,連線超時。

問題產生了: 為何 控制機 IP變成了 169.254.123.36, IP不是 192.168.1.117 嗎?(問題的根源在於:我安裝的VMware的一個windows虛擬機器的網路設定成了“Bridge 並勾選 Replicate physical network IP address所以在controller機器的網路路由設定中,顯示的網路連線為:VirtualBox Host-Oly Network,在這個連線上右鍵,選擇“Disable“,禁用掉,然後重新執行jmeter-server.bat,在視窗中發現IP已經正確了,這樣問題就解決了) 估計問題就在這裡。

(3) 果斷換了一臺新安裝的 windows 機器作為控制機,然後 重新試了一下,沒有問題。在控制機執行測試,agent機器會收到測試“Starting the test on host 192.168.1.132:1099 @ **”,執行結束後,agent機上有日誌“Finished the test on host 192.168.1.132:1099 @ ***”,控制機上也有相應的測試結果,問題解決。

總結: 問題還是 連線的問題,如果控制機和agent機連線有問題,就會有此類問題,所以建議 控制機和測試機都是乾淨的機器,這樣避免 安裝了一些軟體,修改了 C:\Windows\System32\drivers\etc中HOST檔案,等問題。

測試中發現的問題:

(1) 發現用一臺 client 200個使用者測試和 用分散式 2個agent 各自100個使用者,測試出來的結果 差別太大,不知道為什麼?

(2)  發現用一臺 client 200個使用者測試和 用分散式 2個agent 各自200個使用者,測試出來的結果 結果基本是一致的,不知道為什麼?

如果真是這樣的話,那麼jmeter分散式測試出來的結果太不科學了,我們到底相信那個? 問題持續研究中......

這兩個問題解決方案:

把controller機器,2個agent機器的時間設定一致,再次測試,問題基本解決了。