1. 程式人生 > >Linux系統檢視CPU使用率的幾個命令

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,217144k
cached 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