記一次JAVA服務CLOSE_WAIT解決思路

現象:項目上線前進行壓測,發現很小的併發和請求量就會出現僵住,此時cpu和內存利用率都很低。服務器配置爲4核8G,壓測工具爲ab,壓測參數1000請求20併發。

解決過程:

1.當服務器使用率都正常時,我首先排除是堆棧異常。如果是堆棧異常會使cpu和內存異常。

2.問題的關鍵很有可能出現在網絡上,先netstat查看一下,發現大量CLOSE_WAIT,果然是網絡等待問題。

3.既然是網絡等待,那無外乎幾種可能,第一種程序有耗時操作,並且設置斷開時間很長。第二種程序中有網絡鏈接其他服務,而其他服務處於等待中,比如連接數據庫或者調用第三方api等。很不幸,因爲配置文件,我的bug就出現在連接redis上。

4.修改redis連接數和最大等待超時時間,問題解決。

5.再次壓測,100000請求2000併發,qps穩定在3000+。

 

最後:

問題很簡單,思路很重要,沒有方向盲目解決,白白浪費時間。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章