#系統:centos7;openjdk:1.8;
1、簡單介紹:
#1 若cpu100%,可能所有程序都不能正常幹活(假死)
#2 cpu100%出現情況:沒有多餘cpu切換(所有cpu均被占用,且不能被釋放)
#3 cpu100%出現條件:死迴圈、迴圈裡無阻塞、只有計算型任務
注:system.out.println方法有io,方法裡有synchronized關鍵字、有阻塞。
2、cpu100%排查
#1 jcmd或jps獲取當前異常程序pid
#注 centos7自帶的openjdk1.8若沒有jps等命令,可自行安裝openjdk1.8的開發版
#2 獲取程序pid的執行緒運**況
top -h -p pid
找到cpu占用最高(異常)的執行緒,記錄id
#3 獲取程序pid的堆疊資訊並存進log檔案
jstack pid > tem.log
#4 將第2步獲取的id轉換成十六機制,並在第3步的tem.log檔案裡查詢該程序號,由此鎖定異常api,再具體分析**
注:synchronized引起的死鎖會被jstack pid直接分析出deadlock,因為synchronized關鍵字是jvm提供的,做了優化。
3、請求程式異常情況分析
#1 完全不響應:很有可能deadlock
#2 響應較慢:用jstack排查
#3 排查思路,例如2s不響應算是不太合理算是比較慢:
a、將2s之前jstack生成log和2s之後jstack生成log進行對比,檢視執行緒在還是不在,在的話,檢視為什麼還沒執行完
注:tomcat不太適用,因為tomcat裡是執行緒池,thread可以復用
伺服器CPU100 的排查日誌
早上發現訪問伺服器非常慢,趕緊登入控制台,原來cpu正在滿負荷執行。一 ssh到伺服器,先使用top命令確定一下當前的伺服器負載 top發現 mysql 的 cpu 占用已經達到了 375 因為是4核心 那就初步確定是 mysql 的問題了。二 看看哪些sql造成的cpu占用過高 執行一條語句,用來...
線上問題定位 CPU100
伺服器cpu突然告警,如何定位是哪個服務程序導致cpu過載,哪個執行緒導致cpu過載,哪段 導致cpu過載?步驟一 找到最耗cpu的程序 工具 top 方法 圖示 如上圖,最耗cpu的程序pid為1802 步驟二 找到最耗cpu的執行緒 工具 top 方法 圖示 如上圖,程序1802內,最耗cpu的...
列印程序Spooler占用 cpu 100
當列印佇列檔案損壞時,print spooler 服務的程序 spoolsv.exe 可能會導致很高的 cpu 占有率,同時無法繼續執行列印過程。重新啟動 print spooler 服務也不能解決上述問題。當使用者嘗試列印檔案時,如果位於 systemroot system32 spool pri...