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利用率的各種工具。利用這些工具,你將可以查...