如何定位死迴圈或高CPU利用率linux

2021-09-02 07:27:54 字數 850 閱讀 9941

sudo gdb --pid 程序號

**:最近在完成乙個比較大的多執行緒c++離線服務程式後,發現經常會出現卡住的情況,表現為cpu利用率100%左右,一直沒找到**原因,就採用了乙個笨到方法,每小時重啟一次服務……

這樣做仍然會有好多資料進不了庫,不是治本的方法,前幾天決定徹底解決這個問題,搜尋發現了gdb的乙個強大的功能,gdb attach(如何定位死迴圈或高cpu使用率(linux) - sonic4x),記錄一下。

找出cpu利用率高的程序(例如http_***)的所有執行緒,進行排序

得到結果:

找到執行緒2237的cpu佔用率高。

gdb,attach pid,info threads顯示所有執行緒

gdb>attach 2233

gdb>info threads

結果如下,可以發現2237的編號為4

4 thread 0xac1fcb70 (lwp 2237)  0x004ef0d7 in mq_timedreceive () from /lib/tls/i686/cmov/librt.so.1

* 1 thread 0xb78496d0 (lwp 2238  0x006e0422 in __kernel_vsyscall ()

使用thread切換執行緒,使用bt顯示執行緒棧

gdb>thread 4

gdb>bt

可以定位到某個函式到某行**了,就找到原因了。

如何定位死迴圈或高CPU使用率 linux

使用top觀察是否存在cpu使用率過高現象 對cpu使用率過高的程序的所有執行緒進行排序 ps h e o pid,tid,pcpu,cmd sort pcpu grep 得到如下結果,其中執行緒2909使用了7.8 的cpu.2907 2913 0.0 2907 2909 7.8 也可以通過檢視 ...

如何檢視linux系統CPU利用率

當linux系統被某乙個程序占用時,它無法處理其它程序的請求。餘下等待處理的請求必須等到cpu空閒。這 個時候,系統會變得很慢。以下命令將能夠幫助你識別cpu的利用率,從而解決與cpu相關的問題。查明cpu利用率是一項重要的任務。linux系統附帶了報告cpu利用率的各種工具。利用這些工具,你將可以...

如何檢視linux系統CPU利用率

當linux系統被某乙個程序占用時,它無法處理其它程序的請求。餘下等待處理的請求必須等到cpu空閒。這個時候,系統會變得很慢。以下命令將能夠幫助你識別cpu的利用率,從而解決與cpu相關的問題。查明cpu利用率是一項重要的任務。linux系統附帶了報告cpu利用率的各種工具。利用這些工具,你將可以查...