確定是cpu過高
使用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 ./***也可以通過檢視/proc中的資訊來確定高cpu執行緒. 列印了4列,執行緒id,執行緒名,使用者時間和核心時間(排名未分先後) awk '' /proc/2907/task/*/stat
找出呼叫棧
使用gdb attach nmsagent所在的程序,在gdb中使用 info threads顯示所有執行緒
gdbgdb>attach 2907
gdb>info threads
得到如下結果,可以發現2909執行緒的編號是12
13 thread 0xad5f2b70 (lwp 2908) 0x004ef0d7 in mq_timedreceive () from /lib/tls/i686/cmov/librt.so.1
12 thread 0xad58eb70 (lwp 2909) 0x006e0422 in __kernel_vsyscall ()
11 thread 0xad52ab70 (lwp 2910) 0x006e0422 in __kernel_vsyscall ()
10 thread 0xad4f8b70 (lwp 2911) 0x006e0422 in __kernel_vsyscall ()
9 thread 0xad4c6b70 (lwp 2912) 0x006e0422 in __kernel_vsyscall ()
8 thread 0xad3feb70 (lwp 2913) 0x004ef0d7 in mq_timedreceive () from /lib/tls/i686/cmov/librt.so.1
7 thread 0xace08b70 (lwp 2914) 0x004ef0d7 in mq_timedreceive () from /lib/tls/i686/cmov/librt.so.1
6 thread 0xac607b70 (lwp 2915) 0x006e0422 in __kernel_vsyscall ()
5 thread 0xac5e6b70 (lwp 2916) 0x006e0422 in __kernel_vsyscall ()
4 thread 0xac361b70 (lwp 2917) 0x006e0422 in __kernel_vsyscall ()
3 thread 0xac2fdb70 (lwp 2918) 0x006e0422 in __kernel_vsyscall ()
2 thread 0xac1fcb70 (lwp 2919) 0x004ef0d7 in mq_timedreceive () from /lib/tls/i686/cmov/librt.so.1
* 1 thread 0xb78496d0 (lwp 2907) 0x006e0422 in __kernel_vsyscall ()
使用thread 切換執行緒,使用bt顯示執行緒棧
gdb>thread 12
gdb>bt
得到如下執行緒棧
#0 0x006e0422 in __kernel_vsyscall ()
#1 0x001cca26 in nanosleep () from /lib/tls/i686/cmov/libc.so.6
#2 0x001fc2dc in usleep () from /lib/tls/i686/cmov/libc.so.6
#3 0x0806b510 in osptaskdelay ()
#4 0x0805c710 in cdispatchtask::nodemsgsendtosock() ()
#5 0x0805cc74 in dispatchtaskentry ()
#6 0x0806a8e9 in osptasktemplatefunc(void*) ()
#7 0x00d4780e in start_thread () from /lib/tls/i686/cmov/libpthread.so.0
#8 0x002027ee in clone () from /lib/tls/i686/cmov/libc.so.6
ps + strace
得到程序id 21465
ps -e |grep cmu
4996 ? 00:00:25 cmu_fjga_sp3
21465 pts/5 00:08:10 cmu
得到執行緒時間, 其中最佔cpu的是 epollrecvtask 21581
找出程式cpu使用率高的原因
確定是cpu過高 使用top觀察是否存在cpu使用率過高現象 找出執行緒 對cpu使用率過高的程序的所有執行緒進行排序 ps h e o pid,tid,pcpu,cmd sort pcpu grep 得到如下結果,其中執行緒2909使用了7.8 的cpu.2907 2913 0.0 2907 29...
cpu使用率低負載高
cpu低而負載高也就是說等待磁碟i o完成的程序過多,就會導致佇列長度過大,這樣就體現到負載過大了,但實際是此時cpu被分配去執行別的任務或空閒,具體場景有如下幾種。場景一 磁碟讀寫請求過多就會導致大量i o等待 上面說過,cpu的工作效率要高於磁碟,而程序在cpu上面執行需要訪問磁碟檔案,這個時候...
控制CPU使用率
我使用的是ubuntu 14.04版本,用的是自帶的系統監視器來觀察cpu使用率的變化。1.首先來說說怎麼控制cpu使用率,當程式執行乙個死迴圈的時候,使用率就會變成100 而當程式進入idle的時候,使用率就會很低 在別的程式不啟動的情況下 那麼控制cpu使用率就是調整它idle和busy的時間比...