現象:項目上線前進行壓測,發現很小的併發和請求量就會出現僵住,此時cpu和內存利用率都很低。服務器配置爲4核8G,壓測工具爲ab,壓測參數1000請求20併發。
解決過程:
1.當服務器使用率都正常時,我首先排除是堆棧異常。如果是堆棧異常會使cpu和內存異常。
2.問題的關鍵很有可能出現在網絡上,先netstat查看一下,發現大量CLOSE_WAIT,果然是網絡等待問題。
3.既然是網絡等待,那無外乎幾種可能,第一種程序有耗時操作,並且設置斷開時間很長。第二種程序中有網絡鏈接其他服務,而其他服務處於等待中,比如連接數據庫或者調用第三方api等。很不幸,因爲配置文件,我的bug就出現在連接redis上。
4.修改redis連接數和最大等待超時時間,問題解決。
5.再次壓測,100000請求2000併發,qps穩定在3000+。
最後:
問題很簡單,思路很重要,沒有方向盲目解決,白白浪費時間。