定位CPU占用高的執行緒並列印其堆疊資訊

2022-06-08 18:51:10 字數 1340 閱讀 2362

1、首先使用top命令定位到cpu占用高的程序pid

執行top命令,列出所有程序的情況,然後按大寫的'

p',按cpu占用大小降序顯示程序資訊

2、獲取執行緒資訊,並找到cpu占用高的執行緒

ps -mq pid -o thread,tid,time | sort -rn
3、將需要的執行緒id轉換為16進製制格式

printf "

%x\n

" tid

4、使用pstack列印程序堆疊資訊pstack是乙個shell指令碼,用於列印正在執行的程序的棧跟蹤資訊,它實際上是gstack的乙個鏈結,而gstack本身是基於gdb封裝的shell指令碼。此命令可顯示每個程序的棧跟蹤。pstack 命令必須由相應程序的屬主或 root 執行。pstack是gdb的一部分,如果系統沒有pstack命令,使用yum搜尋安裝gdb即可

這個命令在排查程序問題時非常有用,比如我們發現乙個服務一直處於work狀態(如假死狀態,好似死迴圈),使用這個命令就能輕鬆定位問題所在;可以在一段時間內,多執行幾次pstack,若發現**棧總是停在同乙個位置,那個位置就需要重點關注,很可能就是出問題的地方。如:

pstack pid > 1

.txt;

pstack pid > 2

.txt;

pstack pid > 3.txt;

可檢視1.txt,2.txt和3.txt檔案中對應執行緒id的堆疊情況,有時pstack並不能一次抓到有用的資訊,多執行幾次試試。

注:pstack列印的執行緒id為16進製制的

5、補充

ps -elo pid,lwp,pcpu |grep pid
另外也可使用如上簡單的命令定位到哪段程式可能存在效能問題:獲取程序id,通過pstack命令檢視其中各個執行緒id以及對應的執行緒現在正在做的事情,分析多組資料就可以定位到哪些執行緒裡有慢操作影響了伺服器的效能,從而得到解決方案:

由此可以判斷lwp 30222這個執行緒產生了效能問題,執行時間長達31.4毫秒,再觀察其堆疊資訊,停留在如下幾個語句,只需要簡單排查就可知道問題瓶頸。

如何定位占用cpu過高的執行緒

如何定位占用cpu過高的執行緒 近來發現平台應用響應越來越慢,通過top命令發現,cpu佔用率越來越高 1.首先根據top命令,發現占用cpu最高的程序pid 3075.通過ps aux grep pid命令,進一步檢視當前程序的具體資訊。2.顯示當前程序下的所有執行緒列表 找到耗時最高的執行緒ti...

使用Windbg尋找高CPU占用執行緒

在乙個任務中使用多執行緒程式設計,程式執行一段時間後就佔滿了cpu,嚴重拖慢系統執行速度。這裡所說的高cpu,意思就是乙個執行緒占用了乙個cpu的大部分執行時間,如果是單核的cpu,表現為cpu占用近100 相應的雙核的話乙個執行緒會佔到50 的cpu。我的電腦是雙核四執行緒的cpu,所以當乙個執行...

使用Windbg尋找高CPU占用執行緒

在乙個任務中使用多執行緒程式設計,程式執行一段時間後就佔滿了cpu,嚴重拖慢了系統的執行速度。這裡所說的高cpu,意思就是乙個執行緒占用了乙個cpu的大部分執行時間,如果是單核的cpu,表現為cpu占用近100 相應的雙核的話乙個執行緒會佔到50 的cpu。我的電腦是雙核四執行緒的cpu,所以當乙個...