JAVA進程CPU使用率使用太高故障排查

臨近月底,用戶量上來,發現業務進程頻繁從Eureka上掉下來,觀察後發現掉下來前進程CPU一直佔用比較高。

《Java進程CPU使用率高排查》方法查看堆棧信息,發現有個方法很可疑,發給開發人員查看,以爲表數據量太大,查詢沒有走索引,新建索引後,感受狀況有好轉。

排查步驟以下:
1.使用top 定位到佔用CPU高的進程PID
top
2.獲取線程信息,並找到佔用CPU高的線程
ps -mp pid -o THREAD,tid,time | sort -rn
3.將須要的線程ID轉換爲16進制格式
printf "%x\n" tid
4.打印線程的堆棧信息
jstack pid |grep tid -A 30

同時發現數據庫鏈接有報「Connection reset」的異常,一時也發現不了問題,將dbcp2鏈接池換成durid。

經過durid的spring監控發現(果然很是強大),仍是一樣的方法讀取行數很是大。

發現《 記一次線上Java程序致使服務器CPU佔用率太高的問題排除過程》問題狀況很是類似,由於在以前用jstack查看時,就是GC佔用CPU很是高。

再仔細看代碼,發現某種狀況下,確實會讀取全量表數據。

優化代碼後,問題解決。
相關文章
相關標籤/搜索