在我日常運維工作中,無論自己 或同僚、朋友總會問我,伺服器CPU使用率100%,卡死了,這樣的話,那今天咱們就一起模拟故障,進行細緻的分析,首先介紹下,CPU出現問題的幾種原因:
部落客最新文章位址: https://www.dgstack.cn/archives/178.html
一、CPU 100%問題定位
1、功能問題,通過日志,單步調試相對比較好定位。
2、性能問題,例如線上伺服器CPU100%,如何找到相關服務,如何定位問題代碼,更考驗技術人的功底。
2018-6-4 今日在公司進行一次線上服務CPU問題排查實戰演練,公司全體同僚回報有收獲,特将故障演練報告分享出來,希望對大家也有幫助。
二、故障演練題目
某伺服器上部署了若幹tomcat執行個體,即若幹垂直切分的Java站點服務,以及若幹Java微服務,運維突然收到CPU異常告警。
問:如何定位是哪個服務程序導緻CPU過載?
哪個線程導緻CPU過載?
哪段代碼導緻CPU過載?
第一步 最消耗CPU的程序
工具 : top或者 htop(進階)
方法:top -c 顯示程序運作詳細清單
鍵入 P (大寫P),按照cpu進行排序
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCM581dvRWYoNHLwEzX5xCMx8FesU2cfdGLwATMfRHLGZkRGZkRfJ3bs92YskmNhVTYykVNQJVMRhXVEF1X0hXZ0xiNx8VZ6l2cssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL0kjN3MWMkRmZ0QmZ0MGOiJTNkNWMkZWM4gTZ0MGZwQ2LcRDMvwlNwgTMwIzLcd2bsJ2LcNXZnFWbp9CXt92Yu8GdjFTNuITavw1LcpDc0RHaiojIsJye.png)
如上圖,最耗CPU的程序PID為1865
步驟二:找到最耗CPU的線程
工具:top
方法:
top -Hp 1865 ,顯示一個程序的線程運作資訊清單
鍵入P (大寫p),線程按照CPU使用率排序
如上圖,程序1865内,最耗CPU的線程PID為2747
步驟三:将線程PID轉化為16進制
工具:printf
方法:printf “%x\n” 2747
圖示:
注意:之是以要轉化為16進制,是因為堆棧裡,線程id是用16進制表示的。
步驟四:檢視堆棧,找到線程在幹嘛
`方法:jstack 10765 | grep ‘0x2a34’ -C5 --color`