現象:
某個線上接口調用存在較多超時
1、進一步分析排查現象:
通過外網壓測一個HTTP接口,當報文內容較大時,有較多請求出現超時
通過內網壓測則沒有該情況
2、打開http報文記錄到日志功能
發現部分報文的content-length比實際body長,並且正常body應該是個json串,問題報文的body是一個不完整的json串(沒有 "}" )
引發問題:
A、為什么content-length比實際body長會導致超時
B、為什么body json串不完整
對於問題A:
通過閱讀源碼發現,由於content-length比實際body長,服務端程序阻塞在讀RequestBody相關代碼處,而且請求是keep-alive請求,繼而超時
對於問題B:
通過抓包發現,當一個報文較長時,被分成了很多幀發出,部分幀發送失敗,重發又晚於服務端程序規定的超時時間,會導致超時
解決方案:換網絡質量好雲服務運營商 | 減小報文大小盡量控制在一幀內(去掉協議頭大約1460個字節)