jmeter常見錯(cuò)誤:
錯(cuò)誤一:
Response code: Non HTTP response code: java.net.SocketTimeoutException
Response message: Non HTTP response message: connect timed out
查看Load time的時(shí)間要大于request設(shè)置的connect time out時(shí)間僻肖,所以拋出該異常÷校可能是由于服務(wù)端有較多請(qǐng)求正在處理(且處理時(shí)間較長(zhǎng))臀脏,導(dǎo)致JMeter不能連接上服務(wù)器而產(chǎn)生的。
錯(cuò)誤二:
Java.NET.BindException: Address already in use: connect
原因:短時(shí)間內(nèi)new socket操作很多,而socket.close()操作并不能立即釋放綁定的端口,而是把端口設(shè)置為TIMEWAIT 狀態(tài),過段時(shí)間(默認(rèn)240s)才釋放,(用netstat -na可以看到),最后系統(tǒng)資源耗盡(windows上是耗盡了pool of ephemeral ports ,這段區(qū)間在1024-5000之間)
解決方法:在運(yùn)行JMeter agent的機(jī)器上,添加注冊(cè)表?xiàng)l目HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
MaxUserPort 65334
TcpTimedWaitDelay 30
錯(cuò)誤三:
java.lang.OutOfMemoryError: Java heap space
原因:觀察運(yùn)行jmeter機(jī)器的內(nèi)存揉稚,占用較高秒啦,超過了jmeter設(shè)置的內(nèi)存上限。
解決方案:修改jmeter配置文件搀玖,調(diào)整內(nèi)存可用的范圍
修改/bin/jmeter.bat文件:找到這2行
set HEAP=-Xms256m -Xmx256m
set NEW=-XX:NewSize=128m -XX:MaxNewSize=128m
改為:
set HEAP=-Xms1024m –Xmx2048m(最大值不能超過系統(tǒng)內(nèi)存的1/2)
set NEW=-XX:NewSize=128m -XX:MaxNewSize=512m
錯(cuò)誤四:
Response code: Non HTTP response code: java.net.SocketTimeoutException
Response message: Non HTTP response message: Read timed out
發(fā)生該錯(cuò)誤時(shí)余境,jmeter已經(jīng)連接上服務(wù)器,查看load time沒有超過設(shè)定的request timeout時(shí)間灌诅,錯(cuò)誤可能的原因是葛超,服務(wù)器那邊未處理該線程的請(qǐng)求,或者為保證服務(wù)能力延塑,斷掉了連接绣张。
為了驗(yàn)證該猜想,持續(xù)大于半小時(shí)向服務(wù)器發(fā)送該并發(fā)數(shù)量的請(qǐng)求关带,一段時(shí)間后侥涵,request收到503的response,證明猜想宋雏。
錯(cuò)誤五:
Failed to initialise remote engine java.rmi.ConnectException: Connection refused to host:
原因:分布式測(cè)試時(shí)芜飘,server和agent之間的連接有問題。單個(gè)機(jī)器排查后磨总,發(fā)現(xiàn)是某個(gè)agent機(jī)器安裝了多個(gè)網(wǎng)卡嗦明,rmi遠(yuǎn)程的時(shí)候找的是虛擬機(jī)的網(wǎng)卡,導(dǎo)致連接失敗蚪燕。
解決方案:禁掉不使用的虛擬機(jī)網(wǎng)卡娶牌,測(cè)試之后再恢復(fù)。
jmeter腳本運(yùn)行的過程中馆纳,服務(wù)器性能參數(shù)沒有明顯變化(CPU诗良,內(nèi)存,I/O)鲁驶,但request的響應(yīng)時(shí)間很長(zhǎng)鉴裹。
原因:觀察jmeter agent機(jī)器網(wǎng)絡(luò)使用情況,網(wǎng)絡(luò)使用持續(xù)達(dá)到帶寬的限制峰值钥弯。request 發(fā)送的過程中pending在網(wǎng)絡(luò)中径荔,實(shí)際并發(fā)的request并沒有同一時(shí)間到達(dá)服務(wù)器,所以服務(wù)器沒有明顯變化脆霎。
解決方案:提高jmeter agent機(jī)器網(wǎng)絡(luò)帶寬总处。
錯(cuò)誤六:
Connection timed out: connect
?java.net.ConnectException: Connection timed out: connect
?at java.net.DualStackPlainSocketImpl.connect0(Native Method)
? at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
? at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
? at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
? at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
? at java.net.PlainSocketImpl.connect(Unknown Source)
? at java.net.SocksSocketImpl.connect(Unknown Source)
? at java.net.Socket.connect(Unknown Source)
? at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:121)
? at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:180)
? at org.apache.jmeter.protocol.http.sampler.hc.ManagedClientConnectionImpl.open(ManagedClientConnectionImpl.java:318)
? at org.apache.jmeter.protocol.http.sampler.MeasuringConnectionManager$MeasuredConnection.open(MeasuringConnectionManager.java:114)
?at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:610)
?at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:445)
?at org.apache.http.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:835)
?at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83)
?at org.apache.jmeter.protocol.http.sampler.HTTPHC4Impl.executeRequest(HTTPHC4Impl.java:654)
?at org.apache.jmeter.protocol.http.sampler.HTTPHC4Impl.sample(HTTPHC4Impl.java:413)
?at org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy.sample(HTTPSamplerProxy.java:74)
?at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.followRedirects(HTTPSamplerBase.java:1542)
?at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.resultProcessing(HTTPSamplerBase.java:1636)
?at org.apache.jmeter.protocol.http.sampler.HTTPAbstractImpl.resultProcessing(HTTPAbstractImpl.java:519)
?at org.apache.jmeter.protocol.http.sampler.HTTPHC4Impl.sample(HTTPHC4Impl.java:493)
?at org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy.sample(HTTPSamplerProxy.java:74)
?at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1189)
?at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1178)
?at org.apache.jmeter.threads.JMeterThread.executeSamplePackage(JMeterThread.java:491)
?at org.apache.jmeter.threads.JMeterThread.processSampler(JMeterThread.java:425)
?at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:254)
?at java.lang.Thread.run(Unknown Source)
原因分析:
可能是因?yàn)槎丝谔?hào)耗盡,一般一臺(tái)服務(wù)器的端口號(hào)最多是65535個(gè)绪穆,建議使用該命令分別查看下壓測(cè)機(jī)與服務(wù)器的端口使用情況辨泳,netstat -nat|grep -i 8080|wc -l虱岂,如果這個(gè)個(gè)數(shù)在6w左右玖院,那可能就是端口號(hào)用盡,同時(shí)查看下大多數(shù)的端口狀態(tài)菠红,應(yīng)該都是time_wait狀態(tài)
解決方案:
如果是壓測(cè)機(jī),端口號(hào)用盡难菌,那就增加壓測(cè)機(jī)试溯,使用jmeter分布式壓測(cè)(jmeter默認(rèn)開啟keep_alive的)
如果數(shù)服務(wù)器,端口號(hào)用盡郊酒,最大的可能是服務(wù)器端開了短鏈接遇绞,把短鏈接配置變成長(zhǎng)連接即可
因?yàn)槿绻?wù)器端是短鏈接,當(dāng)jmeter每發(fā)起一個(gè)請(qǐng)求就會(huì)建立一次tcp三次握手燎窘,傳輸完數(shù)據(jù)后摹闽,連接其實(shí)沒有關(guān),連接狀態(tài)是time_wait,下個(gè)請(qǐng)求來(lái)了褐健,會(huì)重新開啟一個(gè)新的端口付鹿,建立tcp三次握手,傳輸數(shù)據(jù)....蚜迅,這樣隨著請(qǐng)求的越來(lái)越多舵匾,端口就會(huì)變得越來(lái)越少,所以端口很快耗盡谁不,而且大多數(shù)端口都處于time_wait狀態(tài),如果服務(wù)器端也支持長(zhǎng)連接坐梯,那么下次請(qǐng)求來(lái)了,就會(huì)在上次請(qǐng)求的通道上繼續(xù)傳輸刹帕,端口使用率大大的降低吵血,就有效的避免了端口耗盡問題。
原因:Jmeter默認(rèn)禁掉了運(yùn)行過程中每個(gè)request的具體response信息收集偷溺,只保留了status践瓷。
解決方法:修改jmeter.properties文件中Results file configuration。把所有和response相關(guān)False的項(xiàng)改為True亡蓉。運(yùn)行后將輸出保存.jtl文件中晕翠。添加tree監(jiān)聽器,過濾只顯示error request砍濒,可以查看到request和response的具體信息淋肾,從而判斷出錯(cuò)原因。
tree report中顯示socket time out相關(guān)的錯(cuò)誤爸邢,如何判斷是jmeter工具的原因樊卓,還是服務(wù)器的原因。