linux中cpu佔用過高排查方法

參考:https://phpmianshi.com/?id=112

CPU使用率查看

top

通過top -d 0.1可以縮短採樣時間。

 

-d:指定每兩次屏幕信息刷新之間的時間間隔。當然用戶可以使用s交互命令來改變之。

load average後面的三個數分別是1分鐘、5分鐘、15分鐘的負載情況。是每隔5秒鐘檢查一次活躍的進程數,然後按特定算法計算出的數值。如果這個數除以邏輯CPU的數量,結果高於5的時候就表明系統在超負荷運轉了。

 

查看多核CPU

top 輸入1就可以看到各個核心的CPU使用率
mpstat -P ALL
sar -P ALL

 

當然你也可以用htop代替top,htop的詳細用法請自行搜索,這裏不多介紹了。

 

找到最耗CPU的進程

top -c

PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND           
3715 www       20   0  139m  18m 8256 S  2.0  0.5   0:05.22 php-fpm: pool www

 

-c:顯示整個命令行而不只是顯示命令名。

按大寫P   按照cpu使用率排序

假設最耗CPU的進程PID爲3715

 

找到最耗CPU的線程

top -Hp 3715

 PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND           
 3715 www       20   0  138m  18m 8280 S  0.0  0.5   0:04.92 php-fpm

 

 

-p:通過指定監控進程ID來僅僅監控某個進程的狀態。
-H 顯示線程信息 show all threads

顯示一個進程的線程運行信息列表

按大寫P   線程按照cpu使用率排序

 

查看堆棧,找到線程在幹嘛

pstack/jstack/grep  

C進程使用pstack查看線程堆棧信息

java進程採用jstack查看線程堆棧信息.

[root@dev logs]# pstack 3715       
#0  0x00007fa864a334e0 in __accept_nocancel () from /lib64/libc.so.6
#1  0x0000000000857ca1 in fcgi_accept_request ()
#2  0x000000000085f42d in main ()

 

如果提示 -bash: pstack: command not found 只要安裝gdb就可以了

yum install gdb -y

 

查看CPU的平均狀況信息

[root@dev logs]# mpstat -P ALL -I SUM 
Linux 2.6.32-504.30.3.el6.x86_64 (dev.aigupiao.com)     06/10/20        _x86_64(2 CPU)

21:09:44     CPU    intr/s
21:09:44     all   2855.24
21:09:44       0    113.53
21:09:44       1   1887.97
mpstat是 Multiprocessor Statistics的縮寫,是實時系統監控工具。其報告與CPU的一些統計信息,這些信息存放在/proc/stat文件中。
當mpstat不帶參數時,輸出爲從系統啓動以來的平均值
mpstat [-P {cpu|ALL}] [internal [count]]
internal 相鄰的兩次採樣的間隔時間    
count 採樣次數,只能和internal一起使用

-P { cpu [,...] | ON | ALL }   #表示監控哪個CPU, cpu在[0,cpu個數-1]中取值
-I { SUM | CPU | ALL }  查看cpu中斷的統計 Report interrupts statistics

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章