上線日記:生產CPU與記憶體資源耗盡
阿新 • • 發佈:2019-01-30
記一次上線出現的問題。
現象:上線後過了沒多久突然發現整個網站的響應都特別慢,一次簡單的查詢都要經過60多秒。後臺dubbo早已超時斷開。
1:因為需要查詢許可權,所以一開始懷疑查詢許可權介面有問題,然後懷疑資料庫查詢慢,將生產執行的sql拼接好直接執行後發現速度很快。
2:直接懷疑伺服器效能,通過查詢伺服器四個節點的cpu與記憶體的使用情況,發現cpu使用率均達到90%以上,且隨著時間還在增長,記憶體也接近耗盡。
不用多想,接下來就是尋找佔用cpu最高的執行緒了。
使用top命令
查詢到佔用cpu最高的pid(程序號)。
使用 top -Hp pid
查詢到tid為376056,377934,376056這三個程序佔用了cpu的大部分使用率。
使用 printf ‘%x/n’ tid
查詢到這三個程序的id的十六進位制
使用jstack pid | grep tid -A 50
檢視執行緒的堆疊資訊。
發現這個三個執行緒中,有一個為GC垃圾回收期在佔用,另外一個為業務中的程式碼,到此可以判斷,業務程式碼中應該會有一段程式碼一直在建立變數或者物件,引起記憶體不足,進而引起GC垃圾回收期一直在進行垃圾回收。
程式碼檢視時,發現有一段程式碼確實可能會出現死迴圈的情況,至此,查排完成,拉hotfix,修復,二次釋出。
PS:本次上線不僅僅有這個問題,折騰來折騰去,到了第二天七點才下班,再此,感謝和我一起加班的測試妹子,一直電話遠端指導我得大佬及此篇文章的作者:。另,由於公司性質,伺服器查詢時的圖片就不發了。