在linux的系統維護中,可能需要經常檢視cpu使用率,分析系統整體的執行情況。而監控CPU的效能一般包括以下3點:執行佇列、CPU使用率和上下文切換。
對於每一個CPU來說執行佇列最好不要超過3,例如,如果是雙核CPU就不要超過6。如果佇列長期保持在3以上,說明任何一個程序執行時都不能馬上得到cpu的響應,這時可能需要考慮升級cpu。另外滿負荷執行cpu的使用率最好是user空間保持在65%~70%,system空間保持在30%,空閒保持在0%~5% 。
下面總結下檢視CPU使用率常用的幾個命令。
1、top
這個命令很常用,在第三行有顯示CPU當前的使用情況。
[root@li676-235 ~]# top
-bn 1 -i -c top - 14:19:51 up 138 days, 7:15, 1 user, load average: 0.20, 0.33, 0.39 Tasks: 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 20 0 15084 1944 1632 R 2.0 0.2 0: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 。
[root@li676-235 ~]# vmstat 1 5 procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 2 0 34792 68376 147688 356132 16 16 421 385 2 2 5 4 91 1 0 3 0 34792 97368 147688 326884 0 0 0 0 133 134 15 6 79 0 0 1 0 34792 62432 147696 360704 0 0 0 88 267 278 63 18 19 0 0 0 0 34792 97160 147696 326904 0 0 0 0 71 82 12 4 84 0 0 1 0 34792 56572 147696 364540 0 0 0 4 261 246 61 23 16 0 03、sar
sar命令語法和vmstat一樣。命令不存在時需要安裝sysstat包,這個包很有用。
CPU使用率
例如每1秒採集一次CPU使用率,共採集5次。
[root@li676-235 ~]# sar -u 1 5 Linux 3.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.71 0.00 18.63 0.00 0.98 15.69 02:41:27 PM all 29.47 0.00 22.11 14.74 0.00 33.68 02:41:28 PM all 67.33 0.00 31.68 0.99 0.00 0.00 02:41:29 PM all 7.00 0.00 2.00 0.00 0.00 91.00 02:41:30 PM all 69.00 0.00 23.00 0.00 0.00 8.00 Average: all 47.79 0.00 19.48 3.01 0.20 29.52
和top一樣,可以看到所有cpu的使用情況。如果需要檢視某顆cpu的使用可以用-P引數。例如指定顯示0號cpu 的使用情況。
[root@li676-235 ~]# sar -P 0 -u 1 5 Linux 3.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 0 44.00 0.00 52.00 4.00 0.00 0.00 02:45:16 PM 0 9.28 0.00 26.80 62.89 1.03 0.00 02:45:17 PM 0 3.06 0.00 14.29 81.63 1.02 0.00 02:45:18 PM 0 4.12 0.00 22.68 72.16 1.03 0.00 02:45:19 PM 0 4.12 0.00 22.68 72.16 1.03 0.00 Average: 0 13.09 0.00 27.81 58.28 0.82 0.00程序佇列長度和平均負載狀態
例如每1秒採集一次,共採集5次。
[root@li676-235 ~]# sar -q 1 5 Linux 3.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-15 02:48:48 PM 1 133 0.34 0.43 0.41 02:48:49 PM 2 132 0.34 0.43 0.41 02:48:50 PM 1 133 0.34 0.43 0.41 02:48:51 PM 2 134 0.31 0.42 0.40 02:48:52 PM 1 133 0.31 0.42 0.40 Average: 1 133 0.33 0.43 0.41
輸出項:
runq-sz:執行佇列的長度(等待執行的程序數)
plist-sz:程序列表中程序(processes)和執行緒(threads)的數量
ldavg-1:最後1分鐘的系統平均負載(System load average)
ldavg-5:過去5分鐘的系統平均負載
ldavg-15:過去15分鐘的系統平均負載
程序建立的平均值和上下文切換的次數
例如每1秒收集一次,共收集5次。
[root@li676-235 ~]# sar -w 1 5 Linux 3.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.01 156.57 02:54:05 PM 1.00 132.00 02:54:06 PM 2.00 201.00 02:54:07 PM 2.02 126.26 02:54:08 PM 2.00 114.00 Average: 1.61 145.98
sar命令也可以獲取過去指定日期的效能引數。
[root@li676-235 ~]# sar -u -f /var/log/sa/sa20 Linux 3.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.78 0.00 8.88 3.59 0.15 61.60 01:30:01 PM all 26.06 0.00 9.96 3.33 0.10 60.55 01:40:01 PM all 25.73 0.00 9.17 3.70 0.09 61.32 01:50:01 PM all 25.70 0.00 9.50 2.79 0.12 61.89 02:00:01 PM all 26.70 0.00 9.73 2.20 0.10 61.28 02:10:01 PM all 26.16 0.00 9.56 4.34 0.11 59.82 02:20:01 PM all 25.49 0.00 9.61 2.76 0.07 62.07 02:30:01 PM all 26.47 0.00 9.94 0.64 0.30 62.65 02:40:02 PM all 27.32 0.00 10.37 3.86 0.15 58.30 02:50:02 PM all 26.98 0.00 10.38 4.56 0.13 57.95 Average: all 26.24 0.00 9.71 3.18 0.13 60.744、mpstat
這個命令也在sysstat包中,語法類似。
例如每1秒收集一次,共5次。
[root@li676-235 ~]# mpstat 1 5 Linux 3.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.53 0.00 23.23 0.00 0.00 0.00 0.00 0.00 24.24 03:01:20 PM all 21.00 0.00 4.00 0.00 0.00 0.00 0.00 0.00 75.00 03:01:21 PM all 53.00 0.00 18.00 0.00 0.00 0.00 0.00 0.00 29.00 03:01:22 PM all 26.00 0.00 3.00 0.00 0.00 0.00 0.00 0.00 71.00 03:01:23 PM all 46.00 0.00 18.00 0.00 0.00 0.00 0.00 0.00 36.00 Average: all 39.68 0.00 13.23 0.00 0.00 0.00 0.00 0.00 47.09
cpu使用情況比sar更加詳細些,也可以用-P指定某顆cpu 。
5、iostat
這個命令主要用來檢視io使用情況,也可以來檢視cpu,個人感覺不常用。
[root@li676-235 ~]# iostat -c 1 2 Linux 3.18.5-x86_64-linode52 (li676-235) 07/20/2015 _x86_64_ (1 CPU) avg-cpu: %user %nice %system %iowait %steal %idle 4.53 0.01 3.81 0.63 0.04 90.99 avg-cpu: %user %nice %system %iowait %steal %idle 38.00 0.00 14.00 0.00 0.00 48.006、dstat
每秒cpu使用率情況獲取
[root@li676-235 ~]# dstat -c ----total-cpu-usage---- usr sys idl wai hiq siq 5 4 91 1 0 0 27 11 62 0 0 0 52 11 37 0 0 0 26 10 63 0 0 1 50 13 37 0 0 1 21 6 72 0 0 0
最佔cpu的程序獲取
[root@li676-235 ~]# dstat --top-cpu -most-expensive- cpu process mysqld 1.5 php-fpm: pool 24 mysqld 59
在linux的系統維護中,可能需要經常檢視cpu使用率,分析系統整體的執行情況。而監控CPU的效能一般包括以下3點:執行佇列、CPU使用率和上下文切換。
對於每一個CPU來說執行佇列最好不要超過3,例如,如果是雙核CPU就不要超過6。如果佇列長期保持在3以上,說明任何一個程序執行時都不能馬上得到cpu的響應,這時可能需要考慮升級cpu。另外滿負荷執行cpu的使用率最好是user空間保持在65%~70%,system空間保持在30%,空閒保持在0%~5% 。
下面總結下檢視CPU使用率常用的幾個命令。
1、top
這個命令很常用,在第三行有顯示CPU當前的使用情況。
[root@li676-235 ~]# top
-bn 1 -i -c top - 14:19:51 up 138 days, 7:15, 1 user, load average: 0.20, 0.33, 0.39 Tasks: 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 20 0 15084 1944 1632 R 2.0 0.2 0: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 。
[root@li676-235 ~]# vmstat 1 5 procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 2 0 34792 68376 147688 356132 16 16 421 385 2 2 5 4 91 1 0 3 0 34792 97368 147688 326884 0 0 0 0 133 134 15 6 79 0 0 1 0 34792 62432 147696 360704 0 0 0 88 267 278 63 18 19 0 0 0 0 34792 97160 147696 326904 0 0 0 0 71 82 12 4 84 0 0 1 0 34792 56572 147696 364540 0 0 0 4 261 246 61 23 16 0 03、sar
sar命令語法和vmstat一樣。命令不存在時需要安裝sysstat包,這個包很有用。
CPU使用率
例如每1秒採集一次CPU使用率,共採集5次。
[root@li676-235 ~]# sar -u 1 5 Linux 3.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.71 0.00 18.63 0.00 0.98 15.69 02:41:27 PM all 29.47 0.00 22.11 14.74 0.00 33.68 02:41:28 PM all 67.33 0.00 31.68 0.99 0.00 0.00 02:41:29 PM all 7.00 0.00 2.00 0.00 0.00 91.00 02:41:30 PM all 69.00 0.00 23.00 0.00 0.00 8.00 Average: all 47.79 0.00 19.48 3.01 0.20 29.52
和top一樣,可以看到所有cpu的使用情況。如果需要檢視某顆cpu的使用可以用-P引數。例如指定顯示0號cpu 的使用情況。
[root@li676-235 ~]# sar -P 0 -u 1 5 Linux 3.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 0 44.00 0.00 52.00 4.00 0.00 0.00 02:45:16 PM 0 9.28 0.00 26.80 62.89 1.03 0.00 02:45:17 PM 0 3.06 0.00 14.29 81.63 1.02 0.00 02:45:18 PM 0 4.12 0.00 22.68 72.16 1.03 0.00 02:45:19 PM 0 4.12 0.00 22.68 72.16 1.03 0.00 Average: 0 13.09 0.00 27.81 58.28 0.82 0.00程序佇列長度和平均負載狀態
例如每1秒採集一次,共採集5次。
[root@li676-235 ~]# sar -q 1 5 Linux 3.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-15 02:48:48 PM 1 133 0.34 0.43 0.41 02:48:49 PM 2 132 0.34 0.43 0.41 02:48:50 PM 1 133 0.34 0.43 0.41 02:48:51 PM 2 134 0.31 0.42 0.40 02:48:52 PM 1 133 0.31 0.42 0.40 Average: 1 133 0.33 0.43 0.41
輸出項:
runq-sz:執行佇列的長度(等待執行的程序數)
plist-sz:程序列表中程序(processes)和執行緒(threads)的數量
ldavg-1:最後1分鐘的系統平均負載(System load average)
ldavg-5:過去5分鐘的系統平均負載
ldavg-15:過去15分鐘的系統平均負載
程序建立的平均值和上下文切換的次數
例如每1秒收集一次,共收集5次。
[root@li676-235 ~]# sar -w 1 5 Linux 3.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.01 156.57 02:54:05 PM 1.00 132.00 02:54:06 PM 2.00 201.00 02:54:07 PM 2.02 126.26 02:54:08 PM 2.00 114.00 Average: 1.61 145.98
sar命令也可以獲取過去指定日期的效能引數。
[root@li676-235 ~]# sar -u -f /var/log/sa/sa20 Linux 3.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.78 0.00 8.88 3.59 0.15 61.60 01:30:01 PM all 26.06 0.00 9.96 3.33 0.10 60.55 01:40:01 PM all 25.73 0.00 9.17 3.70 0.09 61.32 01:50:01 PM all 25.70 0.00 9.50 2.79 0.12 61.89 02:00:01 PM all 26.70 0.00 9.73 2.20 0.10 61.28 02:10:01 PM all 26.16 0.00 9.56 4.34 0.11 59.82 02:20:01 PM all 25.49 0.00 9.61 2.76 0.07 62.07 02:30:01 PM all 26.47 0.00 9.94 0.64 0.30 62.65 02:40:02 PM all 27.32 0.00 10.37 3.86 0.15 58.30 02:50:02 PM all 26.98 0.00 10.38 4.56 0.13 57.95 Average: all 26.24 0.00 9.71 3.18 0.13 60.744、mpstat
這個命令也在sysstat包中,語法類似。
例如每1秒收集一次,共5次。
[root@li676-235 ~]# mpstat 1 5 Linux 3.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.53 0.00 23.23 0.00 0.00 0.00 0.00 0.00 24.24 03:01:20 PM all 21.00 0.00 4.00 0.00 0.00 0.00 0.00 0.00 75.00 03:01:21 PM all 53.00 0.00 18.00 0.00 0.00 0.00 0.00 0.00 29.00 03:01:22 PM all 26.00 0.00 3.00 0.00 0.00 0.00 0.00 0.00 71.00 03:01:23 PM all 46.00 0.00 18.00 0.00 0.00 0.00 0.00 0.00 36.00 Average: all 39.68 0.00 13.23 0.00 0.00 0.00 0.00 0.00 47.09
cpu使用情況比sar更加詳細些,也可以用-P指定某顆cpu 。
5、iostat
這個命令主要用來檢視io使用情況,也可以來檢視cpu,個人感覺不常用。
[root@li676-235 ~]# iostat -c 1 2 Linux 3.18.5-x86_64-linode52 (li676-235) 07/20/2015 _x86_64_ (1 CPU) avg-cpu: %user %nice %system %iowait %steal %idle 4.53 0.01 3.81 0.63 0.04 90.99 avg-cpu: %user %nice %system %iowait %steal %idle 38.00 0.00 14.00 0.00 0.00 48.006、dstat
每秒cpu使用率情況獲取
[root@li676-235 ~]# dstat -c ----total-cpu-usage---- usr sys idl wai hiq siq 5 4 91 1 0 0 27 11 62 0 0 0 52 11 37 0 0 0 26 10 63 0 0 1 50 13 37 0 0 1 21 6 72 0 0 0
最佔cpu的程序獲取
[root@li676-235 ~]# dstat --top-cpu -most-expensive- cpu process mysqld 1.5 php-fpm: pool 24 mysqld 59