一、可能有線程一直占用CPU資源
1. 先通過 ps 查看進程狀態,找出進程的PID(8209)。
2.jstack -l 8209 > /usr/local/work/tomcat/8209.stack 導出PID對應的線程信息到文件
3.對導出的線程文件下載本地做分析(可以文本打開)
4. 通過top -H -p 8209 命令查看對應進程是哪個線程占用CPU過高(eg:8308)
5.printf "%x\n" 8308 轉換十進制為十六進制 此處為:2074。
6.在導出的堆棧文件中搜索線程ID等於nid=0x2074的線程,此處即列出了該線程對應的類
7.根據線程信息找到對應的類定位問題成功,可能的原因:
1.程序計算比較密集(大型矩陣的運算)
2.程序出現了死循環(while循環,hashmap死循環)
3. 程序邏輯結構的問題(數據庫連接沒有釋放,連接池死鎖,自旋鎖一直占用着內存)
二、查看磁盤使用率是不是超出正常范圍。(df)
三、查看內存使用率是否超出正常范圍(free)
四、jvm內存狀態可能出現異常,可能頻繁的GC原因。可以適當的改變堆棧比例。
CPU利用率:1 - CPU空閑運行時間/總運行時間
CPU負載(load):是指在一段時間內占用cpu時間的進程和等待cpu時間的進程數(處於被喚醒狀態,不是wait狀態),取決於CPU隊列。
如果現在出現CPU利用率很低,load很高的情況,可能是IO密集型的任務比較多。
原文地址:https://blog.csdn.net/qiuchaoxi/article/details/81296713