原因:
連接socket時需要通過IP獲取到對應主機的域名來進行連接,此過程會相當耗時
前端有一個超時時間,導致無法在規定時間內收到服務端消息而觸發超時操作
表現:
windows及linux下可不同時出現,與DNS解析的配置有關
瀏覽器console界面會打印大量websocket is closed 錯誤消息
可能伴隨着刷新很慢之類的相關異常現象
解決方法:
1 在hosts文件中添加對應IP的反解析,如:示例IP IP ,其中IP為服務機器的內網地址,無效則自己通過堆棧在某個地方debug代碼來確認
我是通過第一種辦法解決的; sudo vim /etc/hosts (通過hostnamectl獲取機器名) 追加一行 內網IP 機器名全稱 機器名(去掉.后綴) 實例: 192.168.0.11 AP-SHA-VM-P85.internal.sungard.corp AP-SHA-VM-P85
2 重寫SocketWrapperBase類的getLocalName方法,直接返回其私有屬性localAddr。此處不做贅述,存在多個類可用於重寫代碼,根據需要自己合理選擇
3 修改DNS相關配置(可能還存在其他相關配置,個人沒有找到方法1外的相關配置,故無法給出實際例子)
推薦:
卡頓的時候可以使用JDK自帶工具進行分析
獲取程序進程號
JPS
獲取當前程序的堆棧
JSTACK PID > stack.log
原文鏈接:https://blog.csdn.net/qq_36759091/article/details/99404743