Linux系統檢視CPU使用率的幾個命令
在linux的系統維護中,可能需要經常檢視cpu使用率,分析系統整體的執行情況。而監控CPU的效能一般包括以下3點:執行佇列、CPU使用率和上下文切換。
對於每一個CPU來說執行佇列最好不要超過3,例如,如果是雙核CPU就不要超過6。如果佇列長期保持在3以上,說明任何一個程序執行時都不能馬上得到cpu的響應,這時可能需要考慮升級cpu。另外滿負荷執行cpu的使用率最好是user空間保持在65%~70%,system空間保持在30%,空閒保持在0%~5% 。
下面總結下檢視CPU使用率常用的幾個命令。
1、top
這個命令很常用,在第三行有顯示CPU當前的使用情況。
[[email protected]-235~]# top -bn 1-i -c top -14:19:51 up 138 days,7:15,1 user, load average:0.20,0.33,0.39Tasks:115 total,1 running,114 sleeping,0 stopped,0 zombie Cpu(s):4.5%us,3.8%sy,0.0%ni,91.0%id,0.6%wa,0.0%hi,0.0%si,0.0%st Mem:1014660k total,880512k used,134148k free,264904k buffers Swap:262140k total,34788k used,227352k free,217144kcached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 12760 root 2001508419441632 R 2.00.20:00.01 top -bn 1-i -c
如上所示,top命令可以看到總體的系統執行狀態和cpu的使用率 。
%us:表示使用者空間程式的cpu使用率(沒有通過nice排程)
%sy:表示系統空間的cpu使用率,主要是核心程式。
%ni:表示使用者空間且通過nice排程過的程式的cpu使用率。
%id:空閒cpu
%wa:cpu執行時在等待io的時間
%hi:cpu處理硬中斷的數量
%si:cpu處理軟中斷的數量
%st:被虛擬機器偷走的cpu
2、vmstat
之前在本部落格中有介紹過vmstat的使用,詳細使用和引數介紹參考網址:http://www.sijitao.net/1925.html 。
[[email protected]-235~]# vmstat 15 procs -----------memory-------------swap-------io------system-------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 203479268376147688356132161642138522549110303479297368147688326884000013313415679001034792624321476963607040008826727863181900003479297160147696326904000071821248400103479256572147696364540000426124661231600
3、sar
sar命令語法和vmstat一樣。命令不存在時需要安裝sysstat包,這個包很有用。
CPU使用率
例如每1秒採集一次CPU使用率,共採集5次。
[[email protected]-235~]# sar -u 15Linux3.18.5-x86_64-linode52 (li676-235)07/20/2015 _x86_64_ (1 CPU)02:41:25 PM CPU %user %nice %system %iowait %steal %idle 02:41:26 PM all 64.710.0018.630.000.9815.6902:41:27 PM all 29.470.0022.1114.740.0033.6802:41:28 PM all 67.330.0031.680.990.000.0002:41:29 PM all 7.000.002.000.000.0091.0002:41:30 PM all 69.000.0023.000.000.008.00Average: all 47.790.0019.483.010.2029.52
和top一樣,可以看到所有cpu的使用情況。如果需要檢視某顆cpu的使用可以用-P引數。例如指定顯示0號cpu 的使用情況。
[[email protected]-235~]# sar -P 0-u 15Linux3.18.5-x86_64-linode52 (li676-235)07/20/2015 _x86_64_ (1 CPU)02:45:14 PM CPU %user %nice %system %iowait %steal %idle 02:45:15 PM 044.000.0052.004.000.000.0002:45:16 PM 09.280.0026.8062.891.030.0002:45:17 PM 03.060.0014.2981.631.020.0002:45:18 PM 04.120.0022.6872.161.030.0002:45:19 PM 04.120.0022.6872.161.030.00Average:013.090.0027.8158.280.820.00
程序佇列長度和平均負載狀態
例如每1秒採集一次,共採集5次。
[[email protected]-235~]# sar -q 15Linux3.18.5-x86_64-linode52 (li676-235)07/20/2015 _x86_64_ (1 CPU)02:48:47 PM runq-sz plist-sz ldavg-1 ldavg-5 ldavg-1502:48:48 PM 11330.340.430.4102:48:49 PM 21320.340.430.4102:48:50 PM 11330.340.430.4102:48:51 PM 21340.310.420.4002:48:52 PM 11330.310.420.40Average:11330.330.430.41
輸出項:
runq-sz:執行佇列的長度(等待執行的程序數)
plist-sz:程序列表中程序(processes)和執行緒(threads)的數量
ldavg-1:最後1分鐘的系統平均負載(System load average)
ldavg-5:過去5分鐘的系統平均負載
ldavg-15:過去15分鐘的系統平均負載
程序建立的平均值和上下文切換的次數
例如每1秒收集一次,共收集5次。
[[email protected]-235~]# sar -w 15Linux3.18.5-x86_64-linode52 (li676-235)07/20/2015 _x86_64_ (1 CPU)02:54:03 PM proc/s cswch/s 02:54:04 PM 1.01156.5702:54:05 PM 1.00132.0002:54:06 PM 2.00201.0002:54:07 PM 2.02126.2602:54:08 PM 2.00114.00Average:1.61145.98
sar命令也可以獲取過去指定日期的效能引數。
[[email protected]-235~]# sar -u -f /var/log/sa/sa20 Linux3.18.5-x86_64-linode52 (li676-235)07/20/2015 _x86_64_ (1 CPU)01:10:01 PM CPU %user %nice %system %iowait %steal %idle 01:20:02 PM all 25.780.008.883.590.1561.6001:30:01 PM all 26.060.009.963.330.1060.5501:40:01 PM all 25.730.009.173.700.0961.3201:50:01 PM all 25.700.009.502.790.1261.8902:00:01 PM all 26.700.009.732.200.1061.2802:10:01 PM all 26.160.009.564.340.1159.8202:20:01 PM all 25.490.009.612.760.0762.0702:30:01 PM all 26.470.009.940.640.3062.6502:40:02 PM all 27.320.0010.373.860.1558.3002:50:02 PM all 26.980.0010.384.560.1357.95Average: all 26.240.009.713.180.1360.74
4、mpstat
這個命令也在sysstat包中,語法類似。
例如每1秒收集一次,共5次。
[[email protected]-235~]# mpstat 15Linux3.18.5-x86_64-linode52 (li676-235)07/20/2015 _x86_64_ (1 CPU)03:01:18 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle 03:01:19 PM all 52.530.0023.230.000.000.000.000.0024.2403:01:20 PM all 21.000.004.000.000.000.000.000.0075.0003:01:21 PM all 53.000.0018.000.000.000.000.000.0029.0003:01:22 PM all 26.000.003.000.000.000.000.000.0071.0003:01:23 PM all 46.000.0018.000.000.000.000.000.0036.00Average: all 39.680.0013.230.000.000.000.000.0047.09
cpu使用情況比sar更加詳細些,也可以用-P指定某顆cpu 。
5、iostat
這個命令主要用來檢視io使用情況,也可以來檢視cpu,個人感覺不常用。
[[email protected]-235~]# iostat -c 12Linux3.18.5-x86_64-linode52 (li676-235)07/20/2015 _x86_64_ (1 CPU) avg-cpu:%user %nice %system %iowait %steal %idle 4.530.013.810.630.0490.99 avg-cpu:%user %nice %system %iowait %steal %idle 38.000.0014.000.000.0048.00
6、dstat
每秒cpu使用率情況獲取
[[email protected]-235~]# dstat -c ----total-cpu-usage---- usr sys idl wai hiq siq 549110027116200052113700026106300150133700121672000
最佔cpu的程序獲取
[[email protected]-235~]# dstat --top-cpu -most-expensive- cpu process mysqld 1.5 php-fpm: pool 24 mysqld 59