linux 分析程序占用CPU過高

2021-06-29 05:25:16 字數 2611 閱讀 3963

重點是檢視程序的執行緒中,哪個執行緒占用cpu過高,然後用gdb附加到程序,除錯執行緒,看是否有死迴圈或者死鎖等問題,步驟如下:

1 先用ps + grep找出該死的程序pid,比如 1706

gdb attach 到程序號碼(1706)

(仍然在gdb中) info threads 結果大致如下:

(gdb) info threads

8 thread 0x7f9fa9366700 (lwp 1716) 0x0000003cec00b98e

in pthread_cond_timedwait@@glibc_2.3.2 () from /lib64/libpthread.so.0

7 thread 0x7f9fa8965700 (lwp 1720) 0x0000003cec00b98e

in pthread_cond_timedwait@@glibc_2.3.2 () from /lib64/libpthread.so.0

6 thread 0x7f9fa7f64700 (lwp 1721) 0x0000003cec00f4b5

in sigwait ()

from /lib64/libpthread.so.0

5 thread 0x7f9fa7563700 (lwp 1722) 0x0000003cec00b98e

in pthread_cond_timedwait@@glibc_2.3.2 () from /lib64/libpthread.so.0

4 thread 0x7f9fa6b62700 (lwp 1723) 0x0000003cec00b5bc

in pthread_cond_wait@@glibc_2.3.2

() from /lib64/libpthread.so.0

3 thread 0x7f9fa6161700 (lwp 1724) 0x0000003cebce9163

in epoll_wait ()

from /lib64/libc.so.6

2 thread 0x7f9fa1159700 (lwp 1887) 0x0000003cebce9163

in epoll_wait ()

from /lib64/libc.so.6

* 1 thread 0x7f9fa95ad820 (lwp 1706) 0x0000003cec00b5bc

in pthread_cond_wait@@glibc_2.3.2

() from /lib64/libpthread.so.0

找到執行緒號碼對應的thread(lwp1723)即是我們剛剛記下的執行緒號

(仍然在gdb中)thread 執行緒號碼切換到執行緒(4)–這裡在info threads顯示出來的序號需要使用gdb能識別的線程式號,即執行:thread 4切換到我們剛剛記下的執行緒號:1723的對應執行緒,如下:

(gdb) thread 4

[switching to thread 4 (thread 0x7f9fa6b62700 (lwp 1723))]#0

0x0000003cec00b5bc in pthread_cond_wait@@glibc_2.3.2 () from /lib64/libpthread.so.0

6.(仍然在gdb中)bt 檢視執行緒呼叫堆疊

(gdb) bt

#0

0x0000003cec00b5bc

in pthread_cond_wait@@glibc_2.3

.2 () from /lib64/libpthread.so.0

#10x00007f9fa9f7144d

in iceutil::cond

::waitimpl (this=

0x263f4c8,

mutex=

...) at ..

/../include/iceutil/cond.h:215

#20x00007f9fa9f9a4b1

in iceutil::monitor

::wait (this=

0x263f4c8)

at ..

/../include/iceutil/monitor.h:152

#30x00007f9fa9fd7567

in iceinternal::endpointhostresolver

::run (this=

0x263f480)

at endpointi.cpp:161

#40x00007f9fa9b1b975

in starthook (arg=

0x263f480) at thread

.cpp:413

#50x0000003cec0079d1

in start_thread () from /lib64/libpthread.so.0

#60x0000003cebce8b6d

in clone () from /lib64/libc.so.6

7.從上面輸出的資訊,基本上可以檢視執行緒對應的**斷,是否有死迴圈等,如果是死鎖的話,需要多次檢視當前執行緒堆疊,或者檢視全部執行緒的堆疊,總是會有某些個執行緒跟其他執行緒不一致,然後再對應到**來進行定位解決

linux 分析 程序cpu占用過高

重點是檢視程序的執行緒中,哪個執行緒占用cpu過高,然後用gdb附加到程序,除錯執行緒,看是否有死迴圈或者死鎖等問題,步驟如下 先用ps grep找出該死的程序pid,比如 1706 1.gdb attach 到程序號碼 1706 2.仍然在gdb中 info threads 結果大致如下 gdb ...

linux檢視占用cpu最高的程序

linux 檢視占用 cpu最高的程序 psaux head 1 psaux grep v pid sort rn k 3 head 或者top 然後按下m,注意這裡是大寫 linux 檢視占用記憶體最高的程序 psaux head 1 psaux grep v pid sort rn k 4 he...

linux 記憶體,cpu占用最高程序查詢

1.可以使用一下命令查使用記憶體最多的10個程序 ps aux sort k4nr head n 10 2.可以使用一下命令查使用cpu最多的10個程序 ps aux sort k3nr head n 10 解釋下這兩個命令 k 意思是sort 後面接數字,意思取第幾列的作為排序key 有點類似 o...