1. java.net.BindException: Address already in use: connect
開始以為是單機(jī)運(yùn)行腳本運(yùn)行不過來内狗,所以另加了一臺(tái)負(fù)載機(jī)同時(shí)運(yùn)行腳本
分布式環(huán)境部署參考:r
https://www.cnblogs.com/whitewasher/p/6946207.html
但是依然還是會(huì)報(bào)錯(cuò)匿情,后面查閱了相關(guān)資料后發(fā)現(xiàn)即寒,是因?yàn)閣indows本身提供的端口訪問機(jī)制的問題行您。
Windows XP提供給 TCP/IP鏈接的端口為 1024-5000,并且要四分鐘來循環(huán)回收他們违诗。就導(dǎo)致我們?cè)诙虝r(shí)間內(nèi)跑大量的請(qǐng)求時(shí)將端口占滿了揖膜。
解決方案為:
1.cmd中,用regedit命令打開注冊(cè)表
2.在 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters下姿锭,
1 .右擊parameters塔鳍,添加一個(gè)新的DWORD,名字為MaxUserPort
2 .然后雙擊MaxUserPort呻此,輸入數(shù)值數(shù)據(jù)為65534轮纫,基數(shù)選擇十進(jìn)制(如果是分布式運(yùn)行的話,控制機(jī)器和負(fù)載機(jī)器都需要這樣操作哦)
3.修改配置完畢之后記得重啟機(jī)器才會(huì)生效
2.?在Windows機(jī)器上用Jmeter做性能測(cè)試焚鲜,匯總下我自身遇到的錯(cuò)誤和解決方案
java.net.BindException: Address already in use: JVM_Bind
原因分析:壓測(cè)服務(wù)器問題掌唾,由于并發(fā)太高,導(dǎo)致自身port不夠用忿磅,需要調(diào)整機(jī)器的端口糯彬,可用netstat -ano看出來;去掉下面的/c查看詳細(xì)端口占用
定位:
netstat -ano | find "10.215.70.172:443" | find "ESTABLISHED" /c
50
netstat -ano | find "10.215.70.172:443" | find "SYN" /c
netstat -ano | find "10.215.70.172:443" | find "TIME_WAIT" /c
2233
解決方案:
cmd中葱她,用regedit命令打開注冊(cè)表;在 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters下撩扒,?1)右擊parameters,添加一個(gè)新的DWORD/QWORD吨些,名字為MaxUserPort?2)然后雙擊MaxUserPort搓谆,輸入數(shù)值數(shù)據(jù)為65534炒辉,基數(shù)選擇十進(jìn)制,重啟電腦生效
Nginx: 99: Cannot assign requested address for upstream
如下鏈接解決方案:
http://blog.51cto.com/12223582/1877316
3. JMeter測(cè)試問題:address already in use
在Windows Server 2003執(zhí)行JMeter,當(dāng)并發(fā)線程數(shù)較高時(shí)(尤其是測(cè)試機(jī)器還存在連接其他服務(wù)器的socket)挽拔,可能會(huì)產(chǎn)生address already in use的異常辆脸。
搜索一番但校,很多文章指出是Windows的bug螃诅。通過在測(cè)試機(jī)器添加注冊(cè)表項(xiàng)MaxUserPort、TcpTimedWaitDelay状囱,并設(shè)置恰當(dāng)值可解決該錯(cuò)誤(當(dāng)沒有這兩個(gè)注冊(cè)表項(xiàng)時(shí))术裸;或者修改為合適的值(如果已經(jīng)存在這兩個(gè)注冊(cè)表項(xiàng))。
方法:
在運(yùn)行JMeter agent的機(jī)器上上添加注冊(cè)表?xiàng)l目MaxUserPort和TcpTimedWaitDelay亭枷,分別設(shè)置值為65534袭艺、30,以增大可分配的tcp連接端口數(shù)叨粘、減小處于TIME_WAIT狀態(tài)的連接的生存時(shí)間猾编。
該方法確認(rèn)對(duì)Windows Server也有效,因?yàn)樵赪indows Server 2003 R2上發(fā)現(xiàn)缺失MaxUserPort和TcpTimedWaitDelay升敲。具體設(shè)置見下面的連接答倡。
解決方法:
打開注冊(cè)表:ctrl+r 輸入regedit
進(jìn)入注冊(cè)表,路徑為:\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
新建DWORD值驴党,(十進(jìn)制)設(shè)置為30秒瘪撇。名稱:TcpTimedWaitDe,值:30
新建DWORD值,(十進(jìn)制)最大連接數(shù)65534港庄。名稱:MaxUserPort,值:65534
4. Non HTTP response code: java.net.SocketException/Non HTTP response message: Permission denied...
最近在做性能測(cè)試過程中遇到了高并發(fā)時(shí)倔既,后臺(tái)監(jiān)控各項(xiàng)指標(biāo)都很正常,但是測(cè)試結(jié)果中很多Non HTTP response code: java.net.SocketException/Non HTTP response message: Permission denied: connect的錯(cuò)誤鹏氧,翻了一下帖子發(fā)現(xiàn)是system.properties中配置有些問題渤涌,特此記錄一下,沒有時(shí)間細(xì)分析把还,先上解決方法:
修改%JMETER_HOME%/bin/system.properties文件中的java.net.preferIPv4Stack=true即可实蓬;
https://blog.csdn.net/dilai0918/article/details/101588077
5.java.net.SocketException: Socket closed問題
解決方法:?將每條HTTP Request 添加以下配置??在Advanced中配置 implementation 選擇HttpClient4,Connect 選擇連接保持時(shí)間 單位為毫秒
6. java.net.SocketException/Non HTTP response message: Connection reset
user.properties:
httpclient4.retrycount=1
hc.parameters.file=hc.parameters
hc.parameters:
http.connection.stalecheck$Boolean=true
7.?Jmeter壓測(cè)報(bào)錯(cuò):Non HTTP response code: java.net.ConnectExceptionexception的解決辦法
前一段時(shí)間進(jìn)行jmeter壓測(cè)時(shí),一直報(bào)錯(cuò)笨篷,查看了下日志才發(fā)現(xiàn)報(bào)了一堆Non HTTP response code: java.net.ConnectExceptionexception瞳秽,直接jmeter就沒發(fā)送到服務(wù)端
本想加個(gè)Constant Throughput Timer去進(jìn)行控制qps從而避免錯(cuò)誤率,可是那樣qps就不是服務(wù)器的最大壓力值了率翅。
想了好幾種方法练俐,也將jmeter.properties中的httpclienc.timeout調(diào)大去嘗試,還是有這個(gè)錯(cuò)誤
最后試了一下將client implementation配置成java冕臭,結(jié)果奇跡出現(xiàn)了腺晾,發(fā)送不出去的錯(cuò)誤被避免了燕锥,qps的量也上來了
總結(jié):有加解密的情況下,默認(rèn)的HTTPClinet在POST時(shí)會(huì)自動(dòng)將特殊字符轉(zhuǎn)義悯蝉,然而Java在發(fā)送過程中卻未處理归形;
jmeter發(fā)送http請(qǐng)求時(shí),implementation會(huì)有以下幾種選項(xiàng)
JAVA:使用的是JAVA JVM提供的http方法鼻由,但有一定的限制暇榴,
1、當(dāng)jmeter釋放一個(gè)請(qǐng)求后蕉世,同樣的進(jìn)程中可能不會(huì)再使用了蔼紧;
2、只使用于單進(jìn)程模式狠轻;
3奸例、不支持虛擬主機(jī),不支持相關(guān)的方法向楼,不支持存儲(chǔ)證書的請(qǐng)求
HttpClient4.1:使用的是Apache HttpClient4.1部件
空白:使用Http默認(rèn)請(qǐng)求中配置或jmeter.properties中jmeter.httpsample中的配置
8. Jmeter之Non HTTP response code: java.net.SocketException/Non HTTP response message: Permission denied: connect
最近在做性能測(cè)試過程中遇到了高并發(fā)時(shí)查吊,后臺(tái)監(jiān)控各項(xiàng)指標(biāo)都很正常,但是測(cè)試結(jié)果中很多Non HTTP response code: java.net.SocketException/Non HTTP response message: Permission denied: connect的錯(cuò)誤湖蜕,翻了一下帖子發(fā)現(xiàn)是system.properties中配置有些問題逻卖,特此記錄一下,沒有時(shí)間細(xì)分析重荠,先上解決方法:
修改%JMETER_HOME%/bin/system.properties文件中的java.net.preferIPv4Stack=true即可箭阶;
需要了解原因的可以參考該貼:
https://blog.csdn.net/hualusiyu/article/details/53490183
9. Connection reset
Apache JMeter對(duì)啟用SSL的應(yīng)用程序執(zhí)行性能和/或負(fù)載測(cè)試時(shí),SSL套接字錯(cuò)誤可能是經(jīng)常遇到的麻煩戈鲁,嚴(yán)重阻礙了您的測(cè)試工作仇参。本文重點(diǎn)介紹如何通過相應(yīng)地配置和調(diào)優(yōu)JMeter來克服這些與連接相關(guān)的錯(cuò)誤。
在Jmeter中指示SSL套接字問題的錯(cuò)誤消息示例包括:
Non HTTP response code: java.net.SocketException Non HTTP response message: Connection reset`
`Non HTTP response code: java.net.SocketTimeoutException Non HTTP response message: connect timed out`
`Non HTTP response code: java.net.SocketTimeoutException Non HTTP response message: Read timed out
建議#1:使用最新版本的JMeter
強(qiáng)烈建議使用最新版本婆殿,以利用新的改進(jìn)和組件诈乒。
避免在最后一個(gè)版本之前使用早于3個(gè)版本的版本。
建議#2:在JMeter中啟用DEBUG模式
將以下內(nèi)容添加到j(luò)meter.properties以啟用JMeter Logger面板:
jmeter.loggerpanel.display=true
要通過JMeter菜單將日志級(jí)別增加到DEBUG:
Options -> Log Level -> DEBUG?
要通過log4j2.xml啟用上下文和線路日志記錄的調(diào)試模式:
<Logger name="org.apache.http" level="debug" />
建議#3:設(shè)置連接超時(shí)
JMeter中的默認(rèn)連接超時(shí)是開箱即用的20秒婆芦。為幫助診斷和解決套接字連接問題怕磨,增加此值通常很有幫助。為此消约,請(qǐng)?jiān)贘Meter測(cè)試計(jì)劃中為HTTP Request對(duì)象指定更高的連接超時(shí)肠鲫。例如,設(shè)置為60000(毫秒)以將總超時(shí)增加到60秒或粮。
從“配置元素”選項(xiàng)中添加“HTTP請(qǐng)求默認(rèn)”配置元素(即导饲,右鍵單擊測(cè)試計(jì)劃并添加此“HTTP請(qǐng)求默認(rèn)值”)。
在“HTTP請(qǐng)求默認(rèn)值”中,有一個(gè)選項(xiàng) - 連接'超時(shí)(毫秒)'在此字段中指定您的連接超時(shí)值渣锦,它將應(yīng)用于所有子采樣器硝岗。如果在測(cè)試計(jì)劃級(jí)別添加了“HTTP請(qǐng)求默認(rèn)值”,則它將應(yīng)用于所有采樣器和所有線程組袋毙。
要指定單獨(dú)的連接超時(shí)型檀,請(qǐng)?jiān)诿總€(gè)采樣器的相同字段中指定。單個(gè)采樣器連接超時(shí)將覆蓋“HTTP請(qǐng)求默認(rèn)”連接超時(shí)值听盖。
建議#4:延遲線程創(chuàng)建
JMeter可以選擇延遲線程創(chuàng)建胀溺,直到線程開始采樣(即,在任何線程組延遲和線程本身的加速時(shí)間之后)媳溺。這允許非常大的線程總數(shù)月幌,前提是不會(huì)有太多并發(fā)的線程碍讯。
建議5:禁用并行下載
JMeter使用更多資源來模擬瀏覽器并行獲取嵌入資源悬蔽,如css,gif捉兴,js和靜態(tài)內(nèi)容蝎困。如果有許多用戶,則可能會(huì)創(chuàng)建太多線程倍啥,并且由于JMeter端的帶寬爭(zhēng)用而開始對(duì)響應(yīng)時(shí)間產(chǎn)生負(fù)面影響禾乘。如果要模擬許多用戶,建議禁用并行下載虽缕,因?yàn)镴Meter不會(huì)模擬瀏覽器的緩存始藕,瀏覽器也不會(huì)在后續(xù)請(qǐng)求中重新下載嵌入式資源。
建議#6:配置受信任和客戶端SSL證書
如果您的應(yīng)用程序服務(wù)器層上有內(nèi)部簽名或自簽名證書氮趋,則需要將JMeter配置為將這些證書識(shí)別為有效伍派。要解決此問題,請(qǐng)修改system.properties并使用相關(guān)的簽名者證書配置信任庫剩胁。
# Truststore properties (trusted certificates)javax.net.ssl.trustStore=C:/trust.jksjavax.net.ssl.trustStorePassword=sample
如果您的應(yīng)用程序需要SSL客戶端證書身份驗(yàn)證或授權(quán)诉植,則需要?jiǎng)?chuàng)建密鑰庫并在指向該密鑰庫的system.properties文件中設(shè)置以下屬性:
# Keystore properties (client certificates)javax.net.ssl.keyStore=C:/key.jksjavax.net.ssl.keyStorePassword=sample
建議7:調(diào)整JMeter SSL配置
在jmeter.properties中設(shè)置下面的屬性,以調(diào)整JMeter處理SSL會(huì)話昵观,協(xié)議和密碼的方式:
要啟用SSL會(huì)話共享:
https.sessioncontext.shared=true
設(shè)置默認(rèn)HTTPS協(xié)議級(jí)別:
https.default.protocol=TLSv1.2
要啟用多個(gè)HTTPS協(xié)議:
https.socket.protocols=TLSv1 TLSv1.2
要啟用多個(gè)密碼:
https.cipherSuites=TLS_RSA_WITH_AES_128_CBC_SHA256 TLS_RSA_WITH_AES_256_CBC_SHA256
要在測(cè)試期間保留SSL上下文:
https.use.cached.ssl.context=true
在http 4上設(shè)置重試次數(shù)
httpclient4.retrycount=1
建議#8:?jiǎn)⒂藐惻f連接檢查
為避免HTTP連接池出現(xiàn)問題晾腔,可能需要在JMeter中啟用陳舊連接檢查。在JMeter測(cè)試運(yùn)行期間接收“Socket Closed”異常時(shí)啊犬,應(yīng)使用此步驟灼擂。要啟用過時(shí)連接檢查,請(qǐng)?jiān)趗ser.properties中設(shè)置以下屬性:
http.connection.stalecheck$Boolean=true
建議#9:在Web服務(wù)器上啟用HTTP Keep-Alive
Keep-Alive是HTTP協(xié)議的一個(gè)非常重要的特性觉至。它允許客戶端通過單個(gè)TCP連接發(fā)出多個(gè)HTTP請(qǐng)求剔应。這提供了很大的性能提升,因?yàn)榉駝t建立許多TCP連接將產(chǎn)生大量不必要的網(wǎng)絡(luò)開銷。
建議#10:檢查負(fù)載均衡器配置
如果負(fù)載測(cè)試遇到負(fù)載均衡器前端的應(yīng)用程序领斥,請(qǐng)確保負(fù)載均衡器配置了足夠的最大連接限制以處理預(yù)期負(fù)載嫉到。同樣,驗(yàn)證負(fù)載平衡算法不會(huì)將過多的流量偏向一個(gè)或多個(gè)應(yīng)用程序服務(wù)器實(shí)例月洛,并且該負(fù)載充分分散在應(yīng)用程序服務(wù)器后端之間何恶。
9 .高并發(fā)下載tomcat下的文件時(shí),發(fā)生java.net.SocketException: Connection reset解決方案
(1)問題產(chǎn)生:使用500個(gè)線程并發(fā)下載tomcat工程中的一個(gè)文件時(shí)嚼黔,服務(wù)器出現(xiàn)java.net.SocketException: Connection reset異常细层,
客戶端出現(xiàn)connect timeout;
(2)分析認(rèn)為是服務(wù)器連接超過最大并發(fā)數(shù)而重置唬涧,導(dǎo)致客戶端連接超時(shí)疫赎;
于是配置tomcat的配置文件,修改最大并發(fā)連接數(shù):
在/home/econf/apache-tomcat-6.0.20/conf目錄下碎节,修改server.xml?在
之后重啟tomcat
此問題解決
10. Jmeter 遇到的問題:rc="Non HTTP response code: java.net.NoRouteToHostException" rm="Non HTTP response mess
在使用Jmeter壓測(cè)時(shí)捧搞,遇到日志中有大量的錯(cuò)誤:
rc="Non HTTP response code: java.net.NoRouteToHostException" rm="Non HTTP response message: Cannot assign requested address"?如下圖:
原因:Jmeter 發(fā)壓機(jī)的端口不夠用
解決辦法:?\1. netstat|grep TIME_WAIT |wc -l 查看目前處在TIME_WAIT狀態(tài)的值大不大?\2. 檢查系統(tǒng)sysctl中配置項(xiàng):(/etc/sysctl.conf)?net.ipv4.tcp_tw_reuse = 1?net.ipv4.tcp_tw_recycle = 1?net.ipv4.tcp_max_tw_buckets = 10000 (5000也OK,主要是前兩個(gè)值)?\3. 如果上面三個(gè)值都正常狮荔,cat /proc/sys/net/ipv4/ip_local_port_range 查看可使用的端口范圍胎撇。如果是默認(rèn)范圍,可修改為:net.ipv4.ip_local_port_range = 1024 65535?\4. 執(zhí)行:sysctl -p 殖氏,使設(shè)置立即生效晚树。
11. 采坑匯總
踩坑一:
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)生的婚瓜。
踩坑二:
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:最大動(dòng)態(tài)端口數(shù)(Default = 5000, Max = 65534)
TcpTimedWaitDelay:TCP等待延遲時(shí)間(30)
TcpNumConnections:TCP最大連接數(shù)(Default = 16,777,214)
MaxFreeTcbs:最大TCP控制塊(1000-2000)
MaxHashTableSize:最大TCB Hash table數(shù)量(64-65536)
解析中值為10進(jìn)制,下方腳本已全轉(zhuǎn)換為16進(jìn)制
Windows Registry Editor Version 5.00
"MaxUserPort"=dword:fffe
"TcpTimedWaitDelay"=dword:1e
"TcpNumConnections"=dword:fffffe
"MaxFreeTcbs"=dword:7D0
"MaxHashTableSize"=dword:10000
踩坑三:
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
踩坑四:
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鳄厌,證明猜想。
踩坑五:
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ù)呐伞。
踩坑六:
接口參數(shù)有中文時(shí),請(qǐng)求后傳參是亂碼慎式?
內(nèi)容編碼設(shè)置為utf-8
踩坑七:
接口參數(shù)化有中文時(shí)伶氢,請(qǐng)求后傳參是亂碼?
內(nèi)容編碼設(shè)置為gb2312
踩坑八:
請(qǐng)求接口響應(yīng)亂碼瞬捕,編碼問題修改配置文件:
jmeter.properties中的sampleresult.default.encoding參數(shù)鞍历,改成sampleresult.default.encoding=utf-8
jmeter安裝路徑,改參數(shù)E:\jmeter\apache-jmeter-3.0\bin文件jmeter.properties中
#sampleresult.default.encoding=ISO-8859-1改為
sampleresult.default.encoding=utf-8
12. Jmeter問題集錦
踩坑一:
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)生的。
踩坑二:
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:最大動(dòng)態(tài)端口數(shù)(Default = 5000, Max = 65534)
TcpTimedWaitDelay:TCP等待延遲時(shí)間(30)
TcpNumConnections:TCP最大連接數(shù)(Default = 16,777,214)
MaxFreeTcbs:最大TCP控制塊(1000-2000)
MaxHashTableSize:最大TCB Hash table數(shù)量(64-65536)
解析中值為10進(jìn)制迅腔,下方腳本已全轉(zhuǎn)換為16進(jìn)制
Windows Registry Editor Version 5.00
"MaxUserPort"=dword:fffe
"TcpTimedWaitDelay"=dword:1e
"TcpNumConnections"=dword:fffffe
"MaxFreeTcbs"=dword:7D0
"MaxHashTableSize"=dword:10000
踩坑三:
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
踩坑四:
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撑蚌,證明猜想上遥。
踩坑五:
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ù)包警。
踩坑六:
接口參數(shù)有中文時(shí)撵摆,請(qǐng)求后傳參是亂碼?
內(nèi)容編碼設(shè)置為utf-8
踩坑七:
接口參數(shù)化有中文時(shí)害晦,請(qǐng)求后傳參是亂碼特铝?
內(nèi)容編碼設(shè)置為gb2312
踩坑八:
請(qǐng)求接口響應(yīng)亂碼,編碼問題修改配置文件:
jmeter.properties中的sampleresult.default.encoding參數(shù)壹瘟,改成sampleresult.default.encoding=utf-8
jmeter安裝路徑鲫剿,改參數(shù)E:\jmeter\apache-jmeter-3.0\bin文件jmeter.properties中
#sampleresult.default.encoding=ISO-8859-1改為
sampleresult.default.encoding=utf-8
13. JMeter測(cè)試問題:java.net.SocketTimeoutException: connect timed out,Read timed out
JMeter測(cè)試計(jì)劃線程組設(shè)置:Ramp-UP Period為5秒稻轨。勾選【delay thread creation until needed 】允許需要時(shí)創(chuàng)建線程灵莲。循環(huán)次數(shù)設(shè)為10。
線程組包含兩個(gè)請(qǐng)求殴俱,分別是①上傳數(shù)據(jù)政冻,②下載數(shù)據(jù)。設(shè)置兩個(gè)請(qǐng)求之間sleep 3000ms线欲。其他為缺省設(shè)置明场。
每個(gè)請(qǐng)求connect time out:3000ms
每個(gè)請(qǐng)求response time out:3000ms
分別以遞增線程數(shù)執(zhí)行測(cè)試,由兩個(gè)agent分別執(zhí)行李丰。在線程數(shù)為500時(shí)苦锨,產(chǎn)生錯(cuò)誤:
錯(cuò)誤1:Response message: Non HTTP response message: connect timed out
錯(cuò)誤分析:通過Load time值看,由于該線程耗費(fèi)時(shí)間(3002)大于設(shè)置的connect time out(3000ms)趴泌,因此拋出該異常舟舒。問題可能是由于服務(wù)端有較多請(qǐng)求正在處理(且處理時(shí)間較長(zhǎng)),導(dǎo)致JMeter不能連接上服務(wù)器而產(chǎn)生的踱讨。
JMeter原始錯(cuò)誤信息:
概要:
Thread Name: 線程組 1-367
Sample Start: 2013-07-05 11:04:17 CST
Load time: 3002
Latency: 0
Size in bytes: 1677
Headers size in bytes: 0
Body size in bytes: 1677
Sample Count: 1
Error Count: 1
Response code: Non HTTP response code: java.net.SocketTimeoutException
Response message: Non HTTP response message: connect timed out
詳細(xì)信息:
java.net.SocketTimeoutException: connect timed out
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
at java.net.Socket.connect(Socket.java:529)
at sun.net.NetworkClient.doConnect(NetworkClient.java:158)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:395)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:530)
at sun.net.www.http.HttpClient.(HttpClient.java:234)
at sun.net.www.http.HttpClient.New(HttpClient.java:307)
at sun.net.www.http.HttpClient.New(HttpClient.java:324)
at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:970)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:911)
at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:836)
at org.apache.jmeter.protocol.http.sampler.HTTPJavaImpl.sample(HTTPJavaImpl.java:487)
at org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy.sample(HTTPSamplerProxy.java:62)
at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1088)
at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1077)
at org.apache.jmeter.threads.JMeterThread.process_sampler(JMeterThread.java:428)
at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:256)
at java.lang.Thread.run(Thread.java:662)
錯(cuò)誤2:Response message: Non HTTP response message: Read timed out
錯(cuò)誤分析:通過返回錯(cuò)誤信息看魏蔗,發(fā)生該錯(cuò)誤時(shí),JMeter已經(jīng)連接上服務(wù)器痹筛,但是產(chǎn)生read time out莺治。從load time(2998)看廓鞠,所用時(shí)間并沒有超過設(shè)定超時(shí)時(shí)間(3000),因此錯(cuò)誤不大可能是JMeter本身產(chǎn)生的谣旁。一種可能是床佳,服務(wù)器那邊未處理該線程的請(qǐng)求,或者為保證服務(wù)能力榄审,斷掉了連接砌们。
JMeter原始錯(cuò)誤信息:
概要:
Thread Name: 線程組 1-10
Sample Start: 2013-07-05 11:12:45 CST
Load time: 2988
Latency: 0
Size in bytes: 2431
Headers size in bytes: 0
Body size in bytes: 2431
Sample Count: 1
Error Count: 1
Response code: Non HTTP response code: java.net.SocketTimeoutException
Response message: Non HTTP response message: Read timed out
詳細(xì)信息:
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:129)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
at java.io.BufferedInputStream.read1(BufferedInputStream.java:258)
at java.io.BufferedInputStream.read(BufferedInputStream.java:317)
at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:697)
at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:640)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1195)
at sun.net.www.protocol.http.HttpURLConnection.getHeaderField(HttpURLConnection.java:2300)
at java.net.URLConnection.getHeaderFieldInt(URLConnection.java:579)
at java.net.URLConnection.getContentLength(URLConnection.java:474)
at org.apache.jmeter.protocol.http.sampler.HTTPJavaImpl.readResponse(HTTPJavaImpl.java:230)
關(guān)于JMeter結(jié)果指標(biāo)值說明的:
http://www.cnblogs.com/Carrie_Liang/archive/2008/11/10/1330997.html
http://asmetg.blog.163.com/blog/static/105828863201111644313362/
回到通常的情況,最近幾天搁进,當(dāng)我為一項(xiàng)測(cè)試增加虛擬用戶數(shù)量時(shí)浪感,遇到了以下錯(cuò)誤。我試圖測(cè)試低至90個(gè)虛擬用戶的J2EE應(yīng)用程序饼问,每個(gè)虛擬用戶的啟動(dòng)時(shí)間為一秒鐘影兽,延遲之間的間隔為一秒鐘。
錯(cuò)誤– jmeter.protocol.http.sampler.HTTPSampler:readResponse:java.net.SocketTimeoutException:讀取超時(shí)
錯(cuò)誤– jmeter.protocol.http.sampler.HTTPSampler:原因:java.net.SocketTimeoutException:讀取超時(shí)
錯(cuò)誤– jmeter.protocol.http.sampler.HTTPSampler:readResponse:java.net.SocketException:服務(wù)器中的文件意外結(jié)束
我花了幾個(gè)小時(shí)試圖在互聯(lián)網(wǎng)上找到有關(guān)此錯(cuò)誤消息的信息莱革,但是在閱讀了一些主題并注意到Google返回的結(jié)果少于我的搜索結(jié)果之后峻堰,我開始想像這不是我的jmeter中的問題配置,但在應(yīng)用程序本身盅视。當(dāng)然捐名,這本來應(yīng)該是尋找的第一位,但是我有點(diǎn)失去了注意力闹击,考慮了所有其他可能的因素镶蹋,例如JMeter Agent內(nèi)存,Glassfish一側(cè)的最大連接數(shù)拇砰,Glassfish一側(cè)的最大線程數(shù)梅忌, EJB池效率,JDBC池效率等除破。
因此,我首先嘗試的是使用最少1個(gè)JMeter Agent(而不是3個(gè))再次運(yùn)行該測(cè)試琼腔,并將虛擬用戶數(shù)量從1瑰枫、2、4丹莲、6和10增加到10光坝。一旦我開始對(duì)超過6個(gè)虛擬用戶進(jìn)行測(cè)試,錯(cuò)誤就會(huì)開始出現(xiàn)甥材。因此盯另,我得出這樣的結(jié)論:某些應(yīng)用程序請(qǐng)求執(zhí)行時(shí)間太長(zhǎng),使應(yīng)用程序服務(wù)器的線程繁忙洲赵,并且不允許傳入請(qǐng)求使用資源鸳惯。
因此商蕴,我再次在一個(gè)簡(jiǎn)單的JMeter GUI中運(yùn)行了相同的測(cè)試,將線程組配置為10個(gè)虛擬用戶芝发。結(jié)果呢绪商?我的要求之一是大約需要30秒才能完成(對(duì)于10個(gè)用戶),而大約要花6秒(對(duì)于1個(gè)虛擬用戶)辅鲸,再次運(yùn)行測(cè)試格郁,逐漸增加n個(gè)虛擬用戶,僅證實(shí)了我的理論独悴,即響應(yīng)時(shí)間在增加與虛擬用戶數(shù)量成比例(當(dāng)然例书,我在想什么?
很明顯刻炒,當(dāng)我的請(qǐng)求中有5個(gè)花了30秒以上才能完成(因此5個(gè)可用的http線程正忙)時(shí)决采,就沒有空間容納第六蜡娶,第七等等麻掸。
因此,對(duì)于仍然在尋找該錯(cuò)誤的所有人筹煮,它在您的應(yīng)用程序?qū)崿F(xiàn)中占90%以上筏勒。某種東西正在占用資源移迫,服務(wù)器斷開了連接。以增量方式檢查所有請(qǐng)求管行,并找到瓶頸厨埋。
并且總是從最后一步開始(在這種情況下,我沒有這樣做!
希望這會(huì)有所幫助捐顷。如果我找到了它荡陷,我肯定會(huì)使用它
使用Jmeter做性能測(cè)試前需要修改的配置
使用jmeter對(duì)多個(gè)項(xiàng)目做性能測(cè)試后發(fā)現(xiàn),jmeter很多默認(rèn)配置是無法支持我們直接開始性能測(cè)試任務(wù)的迅涮;所以在此本人收集了一些未修改配置時(shí)會(huì)出現(xiàn)的常見問題废赞,并給出了對(duì)應(yīng)的解決方案
問題一:接口錯(cuò)誤信息為java.net.BindException: Address already in use?原因:?短時(shí)間內(nèi)new socket操作很多,而socket.close()操作并不能立即釋放綁定的端口,而是把端口設(shè)置為TIMEWAIT 狀態(tài),過段時(shí)間才釋放,(用netstat -na可以看到),最后系統(tǒng)資源耗盡(windows上是耗盡了pool of ephemeral ports ,這段區(qū)間在1024-5000之間)。?解決辦法:?1.按win+R打開運(yùn)行叮姑,輸入regedit命令打開注冊(cè)表唉地;?2.在 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters下,?1)右擊parameters传透,添加一個(gè)新的DWORD耘沼,名字為MaxUserPort?2)然后雙擊MaxUserPort,輸入數(shù)值數(shù)據(jù)為65534朱盐,基數(shù)選擇十進(jìn)制?3.重啟電腦
問題二:運(yùn)行jmeter腳本后無數(shù)據(jù)返回群嗤,jmeter server顯示連接后就立即結(jié)束?原因:?這是剛接觸jmeter工具不久的朋友,或者是在使用分布式部署之后容易犯的錯(cuò)誤兵琳,Jmeter執(zhí)行時(shí)未獲取到參數(shù)化文件csv data set config地址中的數(shù)據(jù)?解決辦法:?jmeter測(cè)試數(shù)據(jù)slave機(jī)器一定要存放狂秘,并且master機(jī)器的csv測(cè)試數(shù)據(jù)地址要以填寫slave機(jī)器的地址
問題三:jmeter運(yùn)行時(shí)報(bào)內(nèi)存溢出OutOfMemoryError?原因:?Jmeter預(yù)設(shè)的內(nèi)存不足骇径,需要手動(dòng)修改?解決辦法:?windows環(huán)境下,修改jmeter.bat:?set HEAP=-Xms256m -Xmx256m?set NEW=-XX:NewSize=128m -XX:MaxNewSize=128m?改為:?set HEAP=-Xms512m -Xmx2048m?set NEW=-XX:NewSize=256m -XX:MaxNewSize=1024m?(此數(shù)據(jù)可根據(jù)自己電腦性能適當(dāng)修改)?linux環(huán)境下赃绊,修改jmeter.sh?java $JVM_ARGS -Xms1G -Xmx5G -XX:MaxPermSize=512m -Dapple.laf.useScreenMenuBar=true -jar?dirname $0/ApacheJMeter.jar “$@”
問題四:jmeter亂碼問題?解決辦法:?在jmeter.properties 這個(gè)文件里面找到sampleresult.default.encoding=xx既峡,后面xx改成utf-8,然后刪除前面的注釋符號(hào)#碧查。?如jmeter的body里面中文顯示不出來运敢,可找到JSyntaxTextArea然后把以js開頭的注釋取消。?JDBC請(qǐng)求查詢結(jié)果亂碼忠售,可在JDBC連接配置中將URL加上characterEncoding=UTF-8
問題五:jmeter只有status信息传惠,無response詳細(xì)信息?原因:?Jmeter默認(rèn)禁掉了運(yùn)行過程中每個(gè)request的具體response信息收集,只保留了status?解決辦法:?修改jmeter.properties文件中Results file configuration稻扬。把所有和response相關(guān)False的項(xiàng)改為True
1卦方、修改物理內(nèi)存
使用jmeter進(jìn)行壓力測(cè)試時(shí)遇到一段時(shí)間后報(bào)內(nèi)存溢出outfmenmory錯(cuò)誤,導(dǎo)致jmeter卡死了泰佳,先嘗試在jmeter.bat中增加了JVM_ARGS="-Xmx2048m -Xms2048m -Xmn256m -XX:PermSize=128m -Xss256k"盼砍,但結(jié)果運(yùn)行時(shí)間增加了,但最終還是報(bào)內(nèi)存溢出逝她,百度后按照網(wǎng)友的建議更改了如下設(shè)置后jmeter就沒有再卡了:
1浇坐、windows環(huán)境下,修改jmeter.bat:?set HEAP=-Xms512m -Xmx4000m?set NEW=-XX:NewSize=256m -XX:MaxNewSize=1024m?改為:?set HEAP=-Xms256m -Xmx1024m?set NEW=-XX:NewSize=128m -XX:MaxNewSize=512m?set PERM=-XX:PermSize=1024m -XX:MaxPermSize=1024m?根據(jù)經(jīng)驗(yàn)黔宛,heap最多設(shè)置為物理內(nèi)存的一半近刘,默認(rèn)設(shè)置為512M.如果heap超過物理內(nèi)存的一半,可能運(yùn)行jmeter會(huì)慢臀晃,甚至出現(xiàn)內(nèi)存溢出觉渴,原因java比較吃內(nèi)存,占CPU.
注意:JDK32位的電腦Xmx不能超過1500m徽惋,最大1378m.否則在啟動(dòng)Jmeter時(shí)會(huì)報(bào)錯(cuò):
2案淋、jmeter 錄制 排除/包含模式設(shè)置
設(shè)置包含模式及排除模式,若不設(shè)置险绘,在錄制完之后哎迄,可以把不需要的.css .jpg的行刪掉。標(biāo)準(zhǔn)的包含模式及排除模式如下所列隆圆。
i. ? ? ? .* - all
ii. ? ? ? .*.png – png images
iii. ? ? ? .*.gif – gif images
iv. ? ? ? .*.jpg – jpeg images
v. ? ? ? .*.php
vi. ? ? ? .*.jsp
vii. ? ? ? .*.html
viii. ? ? ? .*.htm
ix. ? ? ? .*.js
3、jmeter 可視化圖形報(bào)告配置
1翔烁、使用CMD 進(jìn)入jmeter bin目錄
輸入:jmeter -n -t (腳本路徑) -l testLogFile -e -o (存放報(bào)告的路徑)
樣本:jmeter -n -t C:\Users\samsung-\Desktop\接口報(bào)告\腳本\登錄頁面+我的窩頁.jmx -l testLogFile -e -o ./out
2渺氧、對(duì)已有的CSV文件生成報(bào)告,需配置jmeter.properties
配置修改:
jmeter.save.saveservice.bytes = true
# Only available with HttpClient4
#jmeter.save.saveservice.sent_bytes=true
jmeter.save.saveservice.label = true
jmeter.save.saveservice.latency = true
jmeter.save.saveservice.response_code = true
jmeter.save.saveservice.response_message = true
jmeter.save.saveservice.successful = true
jmeter.save.saveservice.thread_counts = true
jmeter.save.saveservice.thread_name = true
jmeter.save.saveservice.time = true
jmeter.save.saveservice.connect_time = true
# the timestamp format must include the time and should include the date.
# For example the default, which is milliseconds since the epoch:
jmeter.save.saveservice.timestamp_format = ms
# Or the following would also be suitable
jmeter.save.saveservice.timestamp_format = yyyy/MM/dd HH:mm:ss如果需要Errors報(bào)告更詳細(xì)蹬屹,配置:jmeter.save.saveservice.assertion_results_failure_message = true使用事物控制器請(qǐng)確認(rèn)Generate parent sample為未勾選
對(duì)已有CSV日志文件生成報(bào)告
命令:jmeter -g??-o?<Path to output folder>
參考:http://www.cnblogs.com/greattao/p/6813156.html
4侣背、上傳圖片
某些瀏覽器(例如Firefox和Opera)在上傳文件時(shí)不包含文件的全名白华。這可能導(dǎo)致JMeter代理服務(wù)器失敗。一個(gè)解決方案是確保任何要上傳的文件都位于JMeter工作目錄中贩耐,方法是復(fù)制文件弧腥,或者在包含文件的目錄中啟動(dòng)JMeter。
5潮太、記錄在JMeter中本機(jī)不可用的基于HTTP的非文本協(xié)議
您可能需要記錄JMeter(自定義二進(jìn)制協(xié)議管搪,Adobe Flex,Microsoft Silverlight铡买,...)默認(rèn)情況下未處理的HTTP協(xié)議更鲁。雖然JMeter不提供本地代理實(shí)現(xiàn)來記錄這些協(xié)議,但您可以通過實(shí)現(xiàn)自定義SamplerCreator來記錄這些協(xié)議奇钞。此采樣器創(chuàng)建者將將二進(jìn)制格式轉(zhuǎn)換為可添加到JMeter測(cè)試用例的HTTPSamplerBase子類澡为。有關(guān)詳細(xì)信息,請(qǐng)參閱“擴(kuò)展JMeter”景埃。
6媒至、JMeter4.0版本修改成中文界面
分布式壓測(cè)配置修改及啟動(dòng)
配置修改:?修改 master 配置?修改 jmeter.properties remote_hosts 字段值,IP 為分布式 agent 的 IP 和端口谷徙。端口默認(rèn)值 1099拒啰。?remote_hosts=agent1IP:1099,agent2IP:1099
修改 slave 配置?-Jserver.rmi.ssl.disable=true
壓測(cè)命令:
分別在不同 slave 上啟動(dòng)分布式 agent?jmeter-server -Jserver.rmi.ssl.disable=true -Djava.awt.headless=true -Djava.rmi.server.hostname=agent1IP
jmeter-server -Jserver.rmi.ssl.disable=true -Djava.awt.headless=true -Djava.rmi.server.hostname=agent2IP?master 機(jī)器上使用命令?jmeter -Djava.awt.headless=true -Jserver.rmi.ssl.disable=true -n -t c.jmx -R agent1IP,agent2IP -l test.jtl
二
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)求來了注整,會(huì)重新開啟一個(gè)新的端口,建立tcp三次握手,傳輸數(shù)據(jù)....肿轨,這樣隨著請(qǐng)求的越來越多,端口就會(huì)變得越來越少蕊程,所以端口很快耗盡椒袍,而且大多數(shù)端口都處于time_wait狀態(tài),如果服務(wù)器端也支持長(zhǎng)連接,那么下次請(qǐng)求來了藻茂,就會(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ù)器的原因沾瓦。**
分類:?Jmeter
0
0
??下一篇:?Django常見問題集錦
登錄后才能查看或發(fā)表評(píng)論满着,立即?登錄?或者?逛逛?博客園首頁
【推薦】并行超算云面向博客園粉絲推出“免費(fèi)算力限時(shí)申領(lǐng)”特別活動(dòng)
【推薦】百度智能云超值優(yōu)惠:新用戶首購云服務(wù)器1核1G低至69元/年
【推薦】跨平臺(tái)組態(tài)\工控\仿真\CAD 50萬行C++源碼全開放免費(fèi)下載!
【推薦】和開發(fā)者在一起:華為開發(fā)者社區(qū)贯莺,入駐博客園科技品牌專區(qū)