⑴ Jmeter 問題錦集
java.io.FileNotFoundException:rmi_keystore.jks
文件校驗問題
1、不進行文件校驗,打開 [ jmeter 安裝目錄 ]\bin\jmeter-server.bat 文件
2、運行 create-rmi-keystore.bat (Windows)/ create-rmi-keystore.sh (Linux) 文件並自行填寫相關信息,運行後,bin 目錄下會多出一個 rmi_keystore.jks 文件,然後將這個文件拷貝到想要運行的 slave 機上,就可以不使用方法1
Error in rconfigure() method java.rmi.ConnectException: Connection refused to host: 192.168.xxx.xxx; nested exception is:
java.net.ConnectException: Connection timed out: connect
1、192.168.xxx.xxx 這個IP 可能是虛擬網卡的 IP,關閉所有的虛擬網卡,只保留本地網路
2、檢查slave伺服器的防火牆是否打開,需要關閉
3、通信雙方的機器沒有識別到有效的遠程IP,考慮將遠程方法調用伺服器的主機IP進行固定設置,再作效果檢查
4、開始測試,但是測試速度非常慢,測試結果也是非常大的值,檢查slave伺服器和被測試伺服器之間是否可以 ping 通地址
第3點分析相應解決方法:
Master機修改 jmeter.bat (windows)/ jmeter.sh (Liunx)
Error in rconfigure() method java.rmi.ConnectException:Connection refused to host
1、查看埠是否被佔用
1、更換埠
java.net.ConnectException:Connection timed out:connect
由於連接被拒絕,這意味著防火牆可能已切斷連接
需要在JMeter和目標伺服器之間打開埠
Response too large to be displayed. Size: 412152 > 204800
未設置察看結果樹的大小
1、打開 [ jmeter 安裝目錄 ]\bin\user.property 文件
2、右擊測試用例——添加——監聽器——保存響應到文件, 填寫要保存的文件名
3、將文件中的返回結果粘貼到此用例的響應斷言中
Not able to find Java executable or version. Please check your Java installation. errorlevel=2
1、errorlevel=1,當前系統安裝的 jdk 版本過低
2、errorlevel=2,沒有配置 jdk 環境變數所致
3、errorlevel=3,當前系統安裝的 jdk 版本過低,不符合 jmeter 要求所致
通用方法:
配置對應這個 jmeter 版本的 jdk 版本的環境變數
第1點分析,其他解決方法:
打開 jmeter.bat 文 件,注釋 set DUMP=-XX:+HeapDumpOnOutOfMemoryError
Bad call to remote host
1、檢查 salve 機器上的 jmeter-server 是否啟動
2、檢查 JMeter.properties 中 remote_hosts 的配置是否錯誤
1、啟動 salve 機器上的 jmeter-server
2、正確配置 JMeter.properties 中 remote_hosts
1、Non HTTP response message: The target server failed to respond
2、Non HTTP response code: java.net.SocketException
調整超時時間,jmeter 的 http 請求中,工具會默認勾選 Use KeepAlive ,在運行時,jmeter.properties 中的 httpclient.timeout 設置默認是注銷的,也就是連接空閑,立馬斷開
打開 [ jmeter 安裝目錄 ]\bin\jmeter.properties 文件
根據情況設置10-60毫秒,能解決報錯問題,問題還是沒有真正解決
Server failed to start: java.rmi.RemoteException: Cannot start. *** is a loopback address.
An error occurred: Cannot start. *** is a loopback address.
沒有指定主機導致這個錯誤
1、修改 hosts 文件
2、打開 [ jmeter 安裝目錄 ]\bin\jmeter.properties 文件
Waiting for possible shutdown message on port 4445
在 master 跑測試腳本時,會一直提示如下信息,導致測試一直跑不起來
這個是用於監聽shutdown message的,如果不需要,可以直接設置為0即可
打開 [ jmeter 安裝目錄 ]\bin\jmeter.properties 文件
Could not reserve enough space for 2097152KB object heap
errorlevel=1
Jmeter 內存不足
打開 [ jmeter 安裝目錄 ]\bin\jmeter.bat 文件
could not find ApacheJmeter_core.jar
找不到 jdk 環境
1、正確安裝對應版本的 jdk
2、正確設置環境變數
jmeter.gui.action.RemoteStart: Failed to initialise remote engine java.rmi.ConnectException: Connection refused to host: 127.0.0.1; nested exception is:
配置了 127.0.0.1,但是未開啟本機的 jmeter-sever.bat/jmeter-sever
開啟本機的 jmeter-sever.bat/jmeter-sever
運行成功,響應斷言也正確通過,但是察看結果樹里為空
模式(Mode)(采樣結果發送模式)默認是Standard,在采樣結果產生後立即發送
打開 [ jmeter 安裝目錄 ]\bin\jmeter.properties 文件
Response code: Non HTTP response code: java.net.SocketTimeoutException
Response message: Non HTTP response message: connect timed out
發生該錯誤時,jmeter已經連接上伺服器,查看load time沒有超過設定的request timeout時間,錯誤可能的原因是,伺服器那邊未處理該線程的請求,或者為保證服務能力,斷掉了連接。
為了驗證該猜想,持續大於半小時向伺服器發送該並發數量的請求,一段時間後,request收到503的response,證明猜想
無
Java.NET.BindException: Address already in use: connect
短時間內new socket操作很多,而socket.close()操作並不能立即釋放綁定的埠,而是把埠設置為TIMEWAIT 狀態,過段時間(默認240s)才釋放,(用netstat -na可以看到),最後系統資源耗盡(windows上是耗盡了pool of ephemeral ports ,這段區間在1024-5000之間)
在運行 JMeter agent 的機器上,添加註冊表條目HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
jmeter腳本運行的過程中,伺服器性能參數沒有明顯變化 (CPU,內存,I/O),但request的響應時間很長。
觀察jmeter agent機器網路使用情況,網路使用持續達到帶寬的限制峰值。request 發送的過程中pending在網路中,實際並發的request並沒有同一時間到達伺服器,所以伺服器沒有明顯變化。
提高jmeter agent機器網路帶寬。
java.io.IOException: Error writing to server
java.net.SocketException: Connection reset
可能是本機的 JVM 太小了
打開 [ jmeter 安裝目錄 ]\bin\jmeter.bat 文件
java.net.SocketException: Unrecognized Windows Sockets error: 0: recv failed
無
打開 [ jmeter 安裝目錄 ]\bin\jmeter.properties 文件
java.net.SocketTimeoutException: Read timed out
無
打開 [ jmeter 安裝目錄 ]\bin\jmeter.properties 文件
For performance it is advised to check "Interpret Condition as Variable Expression"
and use __jexl3 or __groovy evaluating to true or false or a variable that contains true or false.
${JMeterThread.last_sample_ok) can be used to test if last sampler was successful
對於4.x之後的版本 JMeter 中的 If Controller,在Expression輸入框中直接輸入判斷的表達式,如1 == 1、${threadNum} > 2,而不做求值計算(true/false)就執行JMeter是沒有效的,達不到預期的效果。採用JMeter比較早期的版本(如:2.x版本),直接就寫判斷的表達式,並沒有作真假求值運算也能被識別
1、在Expression輸入框中,建議將判斷條件解釋為變數表達式,並使用__jexl3函數或__groovy函數對該變數表達式求值為true/false
2、可輸入值為true/false的變數
3、${JMeterThread.last_sample_ok}可用於檢測最後一個取樣器是否成功執行
java.lang.IllegalStateException: Engine is busy - please try later
1、可能是防火牆規則被阻止
2、控制機、執行機未設置需要連接的IP
1、關閉控制機、執行機的防火牆
2、打開 [ jmeter 安裝目錄 ]\bin\jmeter-server 文件
3、打開 [ jmeter 安裝目錄 ]\bin\system.properties 文件
Response code: Non HTTP response code:org.apache.http.conn.ConnectTimeoutException
Response message: Non HTTP responsemessage: Connect to 10.15.107.112:9089 timed out
Non HTTPresponse code 說明沒有收到來自伺服器的 response。
導致 ConnectTimeoutException 錯誤的可能有 JMeter 本身問題,也可能是伺服器問題。
通過分布式運行 JMeter 的方式來消除 JMeter 本身的影響