背景
進行ws的登錄壓測時,在高並發下很容易出現WebSocket I/O error: Read timed out,需要分析產生的原因。
分析過程
1、jmeter查看結果樹
2、jmeter請求體,發現Response(read) timeout(ms)字段,填寫了6000ms,即6s。遍歷了下查看結果樹中的報錯請求,發現果然Load time 時間大於6S的,均報了Response message: WebSocket I/O error: Read timed out。初步定為是此字段導致。
3、由於業務接口暫時達不到6s返回的標准,這里先不糾結,把Response(read) timeout(ms)字段,改成20000ms,重新跑一遍,再次測試,沒有發現WebSocket I/O error: Read timed out的報錯。
結論
本次的WebSocket I/O error: Read timed out,為jmeter腳本接口返回斷言時間設置不合理導致(哈哈,其實是之前設置的我忘了,這里做下記錄)。但是WebSocket I/O error: Read timed out有無其他報錯原因,暫時不得而知,后面遇到再補充。
20210506補充
在上述操作后,重新壓測,發現ng偶爾出現499日志。經分析如下:
ng日志中查看499有8條:
在jmeter日志(保存下來的用表格查看結果)中超過20S的read timed out剛好也有8條,結合之前的腳本已經被設置響應時間超時為20s,推測這兩個的關聯。
網上查詢一下,發現
499對應的是 “client has closed connection”。這很有可能是因為服務器端處理的時間過長,客戶端“不耐煩”了。
因此推斷,在jmeter腳本設置20s超時后,由於服務器在20內沒有響應返回,在20s后jmeter主動關閉了連接,導致服務器ng的日志記錄499。