CPU100%排查總結
#系統: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可以複用
b、針對tomcat:觀察前後2份log的相關方法呼叫棧,基本沒變化可以說明thread沒幹活;如果大多數thread有問題,基本說明有問題
相關文章
- 程式的bug排查流程總結
- GDI洩漏排查經驗零散總結
- 兩個流程鏈路問題的排查和總結
- 填坑總結:python記憶體洩漏排查小技巧Python記憶體
- Linux 埠排查小結Linux
- RDSforSQLserver空間問題排查彙總SQLServer
- Spring Boot引起的“堆外記憶體洩漏”排查及經驗總結Spring Boot記憶體
- JAVA堆外記憶體排查小結Java記憶體
- javaSE總結(轉+總結)Java
- JAVA CPU100%與執行緒死鎖定位Java執行緒
- 程式猿是如何解決SQLServer佔CPU100%SQLServer
- 總結?
- this總結
- 總結
- 不能算是總結的年終總結薦
- 「比賽總結」AT ABC 358 總結
- 樹結構總結
- ISP 連結總結
- JavaScript基礎總結(三)——陣列總結JavaScript陣列
- 【總結】二叉樹概念大總結二叉樹
- 團隊總結 - Beta版總結會議
- Html總結HTML
- 自我總結
- 索引總結索引
- css 總結CSS
- Promise:總結Promise
- Vagrant 總結
- zookeeper總結
- jvm總結JVM
- Promise總結Promise
- jquery總結jQuery
- 面試總結面試
- Flutter 總結Flutter
- 9.4 總結
- 7.5 總結
- sourcemap總結
- React總結React
- 埠總結