天天看點

CPU100%問題快速定位思路

在我日常運維工作中,無論自己 或同僚、朋友總會問我,伺服器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進行排序

CPU100%問題快速定位思路

如上圖,最耗CPU的程序PID為1865

步驟二:找到最耗CPU的線程

工具:top

方法:

top -Hp 1865 ,顯示一個程序的線程運作資訊清單

鍵入P (大寫p),線程按照CPU使用率排序

CPU100%問題快速定位思路

如上圖,程序1865内,最耗CPU的線程PID為2747

步驟三:将線程PID轉化為16進制

工具:printf

方法:printf “%x\n” 2747

圖示:

注意:之是以要轉化為16進制,是因為堆棧裡,線程id是用16進制表示的。

步驟四:檢視堆棧,找到線程在幹嘛

`方法:jstack 10765 | grep ‘0x2a34’ -C5 --color`           

關于指令解析:

繼續閱讀