在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@tsxiaozhu shop_api]# top -bn 1 -i -c
top - 11:56:34 up 2 days, 10:53, 1 user, load average: 0.03, 3.80, 6.71
Tasks: 134 total, 1 running, 133 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 8010192 total, 5394132 free, 701944 used, 1914116 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 7004912 avail Mem

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND

cpu行(第三行)解讀:

  • us:表示用戶空間程序的cpu使用率(沒有通過nice調度)
  • sy:表示系統空間的cpu使用率,主要是內核程序。
  • ni:表示用戶空間且通過nice調度過的程序的cpu使用率。
  • id:空閑cpu
  • wa:cpu運行時在等待io的時間
  • hi:cpu處理硬中斷的數量
  • si:cpu處理軟中斷的數量
  • st:被虛擬機偷走的cpu

2、vmstat

作用:虛擬內存統計

使用頻率:常用

[root@tsxiaozhu shop_api]# 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
1 0 0 5394696 102160 1812124 0 0 0 6 46 41 1 0 99 0 0
0 0 0 5394696 102160 1812124 0 0 0 0 581 539 0 0 100 0 0
0 0 0 5394556 102160 1812124 0 0 0 0 518 516 0 0 100 0 0
0 0 0 5394556 102160 1812124 0 0 0 16 524 515 0 0 100 0 0
0 0 0 5394556 102160 1812124 0 0 0 16 539 534 0 0 100 0 0

  • Procs(進程)

r:運行隊列中進程數量,這個值也可以判斷是否需要增加CPU。(長期大於1)

b:等待IO的進程數量。

  • Memory(內存)

swpd:使用虛擬內存大小,如果swpd的值不為0,但是SI,SO的值長期為0,這種情況不會影響系統性能。

free:空閑物理內存大小。

buff:用作緩衝的內存大小。

cache:用作緩存的內存大小,如果cache的值大的時候,說明cache處的文件數多,如果頻繁訪問到的文件都能被cache處,那麼磁碟的讀IO bi會非常小。

  • Swap

si:每秒從交換區寫到內存的大小,由磁碟調入內存。

so:每秒寫入交換區的內存大小,由內存調入磁碟。

注意:內存夠用的時候,這2個值都是0,如果這2個值長期大於0時,系統性能會受到影響,磁碟IO和CPU資源都會被消耗。有些朋友看到空閑內存(free)很少的或接近於0時,就認為內存不夠用了,不能光看這一點,還要結合si和so,如果free很少,但是si和so也很少(大多時候是0),那麼不用擔心,系統性能這時不會受到影響的。因為linux總是先把內存用光。

  • IO

bi:每秒讀取的塊數。

bo:每秒寫入的塊數。

  • system(系統)

in:每秒中斷數,包括時鐘中斷。

cs:每秒上下文切換數。

  • CPU(以百分比表示)

us:用戶進程執行時間百分比(user time) us的值比較高時,說明用戶進程消耗的CPU時間多,但是如果長期超50%的使用,那麼我們就該考慮優化程序演算法或者進行加速。

sy:內核系統進程執行時間百分比(system time) sy的值高時,說明系統內核消耗的CPU資源多,這並不是良性表現,我們應該檢查原因。

wa:IO等待時間百分比 wa的值高時,說明IO等待比較嚴重,這可能由於磁碟大量作隨機訪問造成,也有可能磁碟出現瓶頸(塊操作)。

id:空閑時間百分比。

實例1:vmstat –a 顯示活躍和非活躍內存,顯示增加了inact和active列,

[root@tsxiaozhu shop_api]# vmstat -a
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free inact active si so bi bo in cs us sy id wa st
1 0 0 5394060 864064 1526796 0 0 0 6 46 41 1 0 99 0 0

實例2:vmstat -s 查看內存使用的詳細信息

[root@tsxiaozhu shop_api]# vmstat -s
8010192 K total memory
701064 K used memory
1526956 K active memory
864088 K inactive memory
5394184 K free memory
102580 K buffer memory
1812364 K swap cache
0 K total swap
0 K used swap
0 K free swap
438032 non-nice user cpu ticks
423 nice user cpu ticks
64563 system cpu ticks
84641015 idle cpu ticks
4398 IO-wait cpu ticks
0 IRQ cpu ticks
5903 softirq cpu ticks
0 stolen cpu ticks
298409 pages paged in
4876444 pages paged out
0 pages swapped in
0 pages swapped out
82149828 interrupts
78098117 CPU context switches
1544461398 boot time
45404 forks

實例4:vmstat -d 查看磁碟的讀/寫

[root@tsxiaozhu shop_api]# vmstat -d
disk- ------------reads------------ ------------writes----------- -----IO------
total merged sectors ms total merged sectors ms cur sec
vda 13500 3 596818 25376 262125 150641 9753288 5186587 0 83

3、sar

sar命令語法和vmstat一樣。命令不存在時需要安裝sysstat包,這個包很有用。

實例1:每1秒採集一次CPU使用率,共採集5次。

[root@tsxiaozhu shop_api]# sar -u 1 5
Linux 3.10.0-693.2.2.el7.x86_64 (tsxiaozhu) 2018年12月13日 _x86_64_ (4 CPU)

12時16分32秒 CPU %user %nice %system %iowait %steal %idle
12時16分33秒 all 0.25 0.00 0.00 0.00 0.00 99.75
12時16分34秒 all 0.50 0.00 0.00 0.00 0.00 99.50
12時16分35秒 all 0.00 0.00 0.00 0.00 0.00 100.00
12時16分36秒 all 0.00 0.00 0.00 0.00 0.00 100.00
12時16分37秒 all 0.00 0.00 0.00 0.00 0.00 100.00
平均時間: all 0.15 0.00 0.00 0.00 0.00 99.85

註:和top一樣,可以看到所有cpu的使用情況。如果需要查看某顆cpu的使用可以用-P參數。例如指定顯示0號cpu 的使用情況。

[root@tsxiaozhu shop_api]# sar -P 0 -u 1 5
Linux 3.10.0-693.2.2.el7.x86_64 (tsxiaozhu) 2018年12月13日 _x86_64_ (4 CPU)

12時17分36秒 CPU %user %nice %system %iowait %steal %idle
12時17分37秒 0 0.00 0.00 0.00 0.00 0.00 100.00
12時17分38秒 0 0.00 0.00 0.00 0.00 0.00 100.00
12時17分39秒 0 0.00 0.00 0.00 0.00 0.00 100.00
12時17分40秒 0 0.00 0.00 0.00 0.00 0.00 100.00
12時17分41秒 0 0.00 0.00 0.00 0.00 0.00 100.00
平均時間: 0 0.00 0.00 0.00 0.00 0.00 100.00

實例2:進程隊列長度和平均負載狀態(每1秒採集一次,採集5次)

[root@tsxiaozhu shop_api]# sar -q 1 5
Linux 3.10.0-693.2.2.el7.x86_64 (tsxiaozhu) 2018年12月13日 _x86_64_ (4 CPU)

12時18分39秒 runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15 blocked
12時18分40秒 0 215 0.02 0.06 1.61 0
12時18分41秒 0 215 0.02 0.06 1.61 0
12時18分42秒 1 215 0.02 0.06 1.61 0
12時18分43秒 0 215 0.02 0.06 1.61 0
12時18分44秒 0 215 0.02 0.06 1.61 0
平均時間: 0 215 0.02 0.06 1.61 0

輸出項:

  • runq-sz:運行隊列的長度(等待運行的進程數)
  • plist-sz:進程列表中進程(processes)和線程(threads)的數量
  • ldavg-1:最後1分鐘的系統平均負載(System load average)
  • ldavg-5:過去5分鐘的系統平均負載
  • ldavg-15:過去15分鐘的系統平均負載

4、mpstat

這個命令也在sysstat包中,語法類似。

實例1:每1秒收集一次,共5次。

[root@tsxiaozhu shop_api]# mpstat 1 5
Linux 3.10.0-693.2.2.el7.x86_64 (tsxiaozhu) 2018年12月13日 _x86_64_ (4 CPU)

12時20分51秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
12時20分52秒 all 0.25 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.75
12時20分53秒 all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
12時20分54秒 all 0.00 0.00 0.25 0.00 0.00 0.00 0.00 0.00 0.00 99.75
12時20分55秒 all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
12時20分56秒 all 0.25 0.00 0.25 0.00 0.00 0.00 0.00 0.00 0.00 99.50
平均時間: all 0.10 0.00 0.10 0.00 0.00 0.00 0.00 0.00 0.00 99.80

註:cpu使用情況比sar更加詳細些,也可以用-P指定某顆cpu 。

5、iostat

作用:主查看io使用情況,也可以來查看cpu,個人感覺不常用。

頻率:不常用

[root@tsxiaozhu shop_api]# iostat -c 1 2
Linux 3.10.0-693.2.2.el7.x86_64 (tsxiaozhu) 2018年12月13日 _x86_64_ (4 CPU)

avg-cpu: %user %nice %system %iowait %steal %idle
0.51 0.00 0.08 0.01 0.00 99.40

avg-cpu: %user %nice %system %iowait %steal %idle
0.00 0.00 0.25 1.00 0.00 98.75

6、dstat

作用:多功能系統資源統計生成工具

注意:若提示命令不存在則需要安裝

  • 使用yum安裝(推薦)

yum install dstat

  • 使用rpm安裝

wget http://mirror.centos.org/centos/6/os/i386/Packages/dstat-0.7.0-2.el6.noarch.rpm
rpm -ivh dstat-0.7.0-2.el6.noarch.rpm
#直接在系統中調用dstat即可
dstat -V

  • 使用綠色版安裝

wget http://dstat.sourcearchive.com/downloads/0.7.0/dstat_0.7.0.orig.tar.gz
tar -xvzf dstat_0.7.0.orig.tar.gz
cd dstat-0.7.0.orig/
#使用以下方式即可使用dstat
./dstat -V

實例1:每秒cpu使用率情況獲取

[root@tsxiaozhu shop_api]# dstat -c
----total-cpu-usage----
usr sys idl wai hiq siq
1 0 99 0 0 0
0 0 100 0 0 0
0 0 100 0 0 0
0 0 100 0 0 0
0 0 99 0 0 0
0 0 100 0 0 0
0 0 100 0 0 0
0 0 100 0 0 0
0 0 100 0 0 0
1 0 99 0 0 0

實例2:最佔cpu的進程獲取

-most-expensive-
cpu process
AliYunDun 0.0

java 0.8
AliYunDun 0.2
AliYunDun 0.2

推薦閱讀:

相关文章