Linux CPU佔用率監控工具小結

關鍵詞:top、perf、sar、ksar、mpstat、uptime、vmstat、pidstat、time、cpustat、munin、htop、glances、atop、nmon、pcp-gui、collectlhtml

 

1. top

top是最經常使用的查看系統資源使用狀況的工具,包括CPU、內存等等資源。java

這裏主要關注CPU資源。node

1.1 /proc/loadavg

load average取自/proc/loadavg。python

9.53 9.12 8.37 3/889 28165linux

前三個數字是一、五、15分鐘內進程隊列中平均進程數,包括正在運行的進程+準備好等待運行的進程。git

第四個數字分子表示正在運行的進程數,分母是進程總數。github

最後一個數字是最近運行的進程ID號。chrome

其中top取的是/proc/loadavg的前三個數。apache

1.2 top使用

打開top,能夠指定更新的週期。瀏覽器

輸入H,打開隱藏的線程;輸入1,能夠顯示單核CPU使用狀況。

top -H -b -d 1 -n 200 > top.txt,每一個1秒統計一次,共200次,顯示線程細節,並保存到top.txt中。

top採樣來源你還依賴於/proc/stat和/proc/<pid>/stat兩個,這兩個的詳細介紹參考:/proc/stat/proc/<pid>/stat

其中CPU信息對應的含義以下:

us是user的意思,統計nice小於等於0的用戶空間進程,也即優先級爲100~120。

ni是nice的意思,統計nice大於0的用戶空間進程,也即優先級爲121~139。

sys是system的意思,統計內核態運行時間,不包括中斷。

id是idle的意思,幾系統處於空閒態。

wa是iowait的意思,統計io等待時間。

hi是hardware interrupt,統計硬件中斷時間。

si是software interrupt,統計軟中斷時間。

最後的st是steal的意思。

 

 

 

2. perf

系統級性能分析工具perf的介紹與使用》有關於perf使用的詳細介紹,這裏重點關注CPU佔用率。

經過sudo perf top -s comm,能夠查看當前系統運行進程佔比。

這裏不像top同樣區分idle、system、user,這裏的佔比是各個進程在總運行時間裏面佔比。

經過sudo perf record記錄採樣信息,而後經過sudo perf report -s comm。

 

 

3. sar、ksar

sar是System Activity Report的意思,能夠用於實時觀察當前系統活動,也能夠生成歷史記錄的報告。

要使用sar須要安裝sudo apt install sysstat,而後對sysstat進行配置。

sar用於記錄統計信息,ksar用於將記錄的信息圖形化輸出。

ksar下載地址在:https://github.com/vlsi/ksar/releases

sudo gedit /etc/default/sysstat--------------------------------將 ENABLED=「false「 改成ENABLED=「true「。

sudo gedit /etc/cron.d/sysstat--------------------------------修改sar的週期等配置。

sudo /etc/init.d/sysstat restart--------------------------------重啓sar服務

/var/log/sysstat/--------------------------------------------------sar log存放目錄

使用sar記錄開機到目前的統計信息到文件sar.txt。

LC_ALL=C sar -A > sar.txt 

PS:這裏直接使用sar -A,在ksar中沒法正常顯示。

以下執行java -jar ksar.jar,而後Data->Load from text file...選擇保存的sar.txt文件。

獲得以下的圖表。 

還能夠經過sar記錄一段時間的信息,指定採樣週期和採樣次數。

這些命令前加上LC_ALL=C以後保存到文件中,均可以在ksar中圖形化顯示。

sar 1 100---------------------------------------全部cpu合一的統計信息

sar -P ALL 1 100-----------------------------包括cpu合一以及單個cpu的統計信息

sar -B 1 100-----------------------------------paging統計信息

sar -b 1 100----------------------------------塊設備IO統計信息

sar -d 1 100----------------------------------塊設備活動統計信息

sar -F 1 100---------------------------------掛載的文件系通通計信息

sar -r ALL------------------------------------顯示詳細的內存使用統計信息

sar -S----------------------------------------顯示swap空間使用狀況統計信息

sar -w---------------------------------------顯示進程建立以及進程切換統計信息

sar -W--------------------------------------顯示swap換入換出統計信息。

 

更詳細請參考《How To Create sar Graphs With kSar To Identifying Linux Bottlenecks》、《Collect and report Linux System Activity Information with sar》。

 

4. mpstat

mpstat是Multiprocessor Statistics。當沒有參數時,mpstat顯示系統系統以來全部信息平均值。

常見用法以下,-P ALL監控全部CPU,細節顯示特定CPU;10表示每10秒監控一次;20表示監控20次。

mpstat -P ALL 10 20

結果以下:

Linux 4.13.0-36-generic (xxx)     2018年08月13日     _x86_64_    (4 CPU)

11時01分09秒  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
11時01分19秒  all    3.44    6.26    5.15    0.13    0.00    0.20    0.00    0.00    0.00   84.82
11時01分19秒    0    3.09   13.46    3.29    0.00    0.00    0.10    0.00    0.00    0.00   80.06
11時01分19秒    1    4.41    3.11    5.02    0.00    0.00    0.60    0.00    0.00    0.00   86.86
11時01分19秒    2    2.96    0.20    9.29    0.00    0.00    0.10    0.00    0.00    0.00   87.45
11時01分19秒    3    3.32    7.95    3.12    0.50    0.00    0.00    0.00    0.00    0.00   85.11

11時01分19秒  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
11時01分29秒  all    3.65    6.09    5.08    0.00    0.00    0.25    0.00    0.00    0.00   84.93
11時01分29秒    0    3.92   11.07    4.63    0.00    0.00    0.20    0.00    0.00    0.00   80.18
11時01分29秒    1    4.39    1.90    3.49    0.00    0.00    0.80    0.00    0.00    0.00   89.42
11時01分29秒    2    3.35    0.10   10.14    0.00    0.00    0.00    0.00    0.00    0.00   86.41
11時01分29秒    3    2.91   11.26    2.21    0.00    0.00    0.00    0.00    0.00    0.00   83.62

 

usr表示用戶空間進程,nice表示nice值大於0的用戶空間進程。

sys是內核空間,iowait是I/O等待時間,irq是硬中斷,soft是軟中斷,idle是空閒時間,guest和gnice都是虛擬機時間。

 

5. uptime

uptime是一個簡單獲取系統總共運行多長時間,以及最近1分鐘、5分鐘、15分鐘的平均負載。

uptime經過/proc/uptime和/proc/loadavg獲取相關信息。

up前是當前系統時間,up後是系統運行時長。

load average後是1分鐘、5分鐘、15分鐘平均負載。

11:15:41 up 82 days, 20:34,  8 users,  load average: 0.28, 0.40, 0.43

 

6. vmstat

vmstat主要用於監控系統內存使用狀況的工具,可是也包含一些CPU相關信息。

使用方法vmstat 5 5表示運行5次,每次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 472576 228688 559092 1061756    0    0     9    39    1    0  8  4 87  0  0
 1  0 472576 228184 559100 1061756    0    0     0    13 1532 3395 10  6 84  0  0
 1  0 472576 229308 559100 1061616    0    0     0     0 1446 3449 10  5 85  0  0
 0  0 472576 229592 559108 1061616    0    0     0     6 1419 3474 10  5 85  0  0
 1  0 472576 229804 559108 1061616    0    0     0     0 1446 3439 10  5 85  0  0

上面的參數能夠分爲6大部分:進程、內存、swap、io、中斷和進程切換、cpu。

更加詳細的解釋:

 參考文檔:《Linux Performance Measurements using vmstat

 

7. pidstat

pidstat主要用於監控所有或指定進程佔用系統資源的狀況。

7.1 查看CPU使用狀況

pidstat首次運行時顯示自系統啓動開始的各項統計信息,以後運行pidstat將顯示自上次運行該命令之後的統計信息。用戶能夠經過指定統計的次數和時間來得到所需的統計信息。

pidstat -p ALL---------------------------顯示全部的進程統計信息,包括idle進程。

pidstat -p ALL -t------------------------更加詳細的顯示了線程統計信息。

pidstat [option] interval [count]-----週期採樣和採樣次數

除此以外還能夠經過-p獲取指定進程的統計信息。

pidstat還能夠經過-r獲取內存使用統計信息,經過-d獲取IO使用統計信息。

 

7.2 查看內存使用狀況

pidstat -p ALL -r結果以下:

15時18分21秒   UID       PID  minflt/s  majflt/s     VSZ     RSS   %MEM  Command
15時18分21秒     0         1      0.02      0.00  185316    3028   0.08  systemd
15時18分21秒     0         2      0.00      0.00       0       0   0.00  kthreadd
15時18分21秒     0         4      0.00      0.00       0       0   0.00  kworker/0:0H
15時18分21秒     0         6      0.00      0.00       0       0   0.00  mm_percpu_wq
15時18分21秒     0         7      0.00      0.00       0       0   0.00  ksoftirqd/0
15時18分21秒     0         8      0.00      0.00       0       0   0.00  rcu_sched

 

minflt/s: 每秒次缺頁錯誤次數(minor page faults),次缺頁錯誤次數意即虛擬內存地址映射成物理內存地址產生的page fault次數。

majflt/s: 每秒主缺頁錯誤次數(major page faults),當虛擬內存地址映射成物理內存地址時,相應的page在swap中,這樣的page fault爲major page fault,通常在內存使用緊張時產生。

VSZ: 該進程使用的虛擬內存(以kB爲單位)。

RSS: 該進程使用的物理內存(以kB爲單位)。

%MEM: 該進程使用內存的百分比。

Command: 拉起進程對應的命令。

7.3 查看磁盤使用狀況

pidstat -p ALL -d結果以下:

15時20分40秒   UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s iodelay  Command
15時20分40秒     0         1     -1.00     -1.00     -1.00 243523129  systemd
15時20分40秒     0         2     -1.00     -1.00     -1.00       0  kthreadd
15時20分40秒     0         4     -1.00     -1.00     -1.00       0  kworker/0:0H
15時20分40秒     0         6     -1.00     -1.00     -1.00       0  mm_percpu_wq
15時20分40秒     0         7     -1.00     -1.00     -1.00 714512328679  ksoftirqd/0
15時20分40秒     0         8     -1.00     -1.00     -1.00 417757303594  rcu_sched

 

kB_rd/s: 每秒進程從磁盤讀取的數據量(以kB爲單位)。

kB_wr/s: 每秒進程向磁盤寫的數據量(以kB爲單位)。

kB_ccwr/s:每秒進程被取消向磁盤寫的數據量(以kB爲單位)。

Command: 拉起進程對應的命令。

 

8. time

time命令能夠被用於統計指定程序的CPU耗時。

好比time cksum nomachine_6.0.80_1.exe獲得以下結果。

2401940638 32606752 nomachine_6.0.80_1.exe

real    0m0.263s-----------------整個操做總耗時,0.263-0.094-0.011=0.158是IO等待耗時。
user    0m0.094s-----------------用戶態耗時
sys    0m0.011s------------------內核態耗時 2401940638 32606752 nomachine_6.0.80_1.exe

real    0m0.098s-----------------第二次執行就能夠看出等待IO操做的時間基本上沒有了。
user    0m0.097s
sys    0m0.000s

 

9. cpustat

經過sudo apt install cpustat安裝,cpustat -T -D -x結果以下。

Load Avg 0.66 0.54 0.49, Freq Avg. 1.46 GHz, 4 CPUs online------------------------------顯示Load Avg信息和平均頻率等。 3791.1 Ctxt/s, 1709.9 IRQ/s, 1800.0 softIRQ/s, 0.0 new tasks/s, 1 running, 0 blocked----進程切換次數、硬中斷、軟中斷等等統計信息。 %CPU   %USR   %SYS   PID S  CPU   Time Task-------------------------------------------CPU佔用率、用戶空間和內核空間佔用率等。 25.74  25.74   0.00 11435 R    3  2.29w /usr/bin/python3
 15.84  15.84   0.00  9445 S    0  1.49w /usr/lib/xorg/Xorg
 10.89   9.90   0.99  2722 S    1  1.05w compiz
  7.92   0.00   7.92 32352 S    2 16.60s [kworker/2:1]
  0.99   0.00   0.99 32397 R    1  0.01s cpustat
  0.99   0.99   0.00 11046 S    2 16.20h compiz
  0.99   0.99   0.00  1317 S    0  8.76h /usr/NX/bin/nxnode.bin
  0.99   0.00   0.99 10293 S    1  1.24m [kworker/1:2]
 64.36  53.47  10.89 Total

Load Avg 0.66 0.54 0.49, Freq Avg. 1.75 GHz, 4 CPUs online
2834.8 Ctxt/s, 1190.9 IRQ/s, 1183.3 softIRQ/s, 0.0 new tasks/s, 4 running, 0 blocked
  %CPU   %USR   %SYS   PID S  CPU   Time Task
 25.76  25.76   0.00 11435 R    3  2.29w /usr/bin/python3
 18.18  18.18   0.00  9445 S    0  1.49w /usr/lib/xorg/Xorg
  7.58   7.58   0.00  2722 S    1  1.05w compiz
  6.06   0.00   6.06 32352 S    2 16.64s [kworker/2:1]
  1.52   0.00   1.52 32397 R    1  0.02s cpustat
  1.52   0.00   1.52     8 S    0  3.00h [rcu_sched]
  1.52   0.00   1.52 18409 S    0  1.16m update-notifier
 62.12  51.52  10.61 Total

Distribution of CPU utilisation (per Task):
% CPU Utilisation   Count   (%)
  0.00 -   1.97       706  98.88
  1.97 -   3.94         0   0.00
  3.94 -   5.91         0   0.00
  5.91 -   7.88         2   0.28
  7.88 -   9.85         0   0.00
  9.85 -  11.82         0   0.00
 11.82 -  13.79         1   0.14
 13.79 -  15.76         0   0.00
 15.76 -  17.73         1   0.14
 17.73 -  19.70         1   0.14
 19.70 -  21.67         0   0.00
 21.67 -  23.64         0   0.00
 23.64 -  25.61         2   0.28
 25.61 -  27.57         0   0.00
 27.58 -  29.54         0   0.00
 29.55 -  31.51         0   0.00
 31.52 -  33.48         0   0.00
 33.48 -  35.45         0   0.00
 35.45 -  37.42         0   0.00
 37.42 -  39.39         1   0.14

Distribution of CPU utilisation (per CPU):----------------------------------------------各CPU佔用率,分用戶空間和內核空間。
 CPU#   USR%   SYS%
    0  17.37   1.20
    1   8.98   2.40
    2   0.60   7.19
    3  25.75   0.00

 

10.  htop

htop和top的功能相似,可是可讀性比top更好。在界面按下F5,能夠看到進程裏面的線程,樹形結構表示了父子關係。

 

 

11. atop

atop是一個監控系統資源和進程的工具。它經過CPU使用率來對列表中的進程進行降序排列,而每個進程則包含了CPU、內存、磁盤和網絡狀態等信息。它的功能與top和htop相似。

 

12. glances

glances是一個由python編寫的,與Nmon功能相似的報告工具,它可以報告統計cpu、內存、網絡、磁盤和進程。除了報告統計,glances不支持任何其餘特性或功能。當程序運行時點擊「h」能夠顯示幫助頁面。

 

 

13. nmon

Nmon是一個很是容易使用,可以在一個屏幕上監視CPU、內存、網絡、磁盤使用情況和進程列表的工具。除了沒法管理進程和修改報告顯示,Nmon與那些只用於報告的報告工具徹底同樣。另外,它能夠將數據保存到電子表格文件。

 

 

 13. pcp-gui

Performance Co-Pilot,簡稱PCP,是一個系統性能和分析框架。它從多個主機整理數據並實時的分析,幫你識別不正常的表現模式。它也提供API讓你設計本身的監控和報告解決方案。

安裝pcp相關工具。

sudo apt install pcp pcp-gui

File->Open View選擇須要打開的視圖,好比CPU、Disk、Memory等。

 

14. collectl、colplot

14.1 collectl使用

collectl是一款很是優秀而且有着豐富的命令行功能的實用程序,你能夠用它來採集描述當前系統狀態的性能數據。

不一樣於大多數其它的系統監控工具,collectl 並不是僅侷限於有限的系統度量,相反,它能夠收集許多不一樣類型系統資源的相關信息,如 cpu 、disk、memory 、network 、sockets 、 tcp 、inodes 、infiniband 、 lustre 、memory、nfs、processes、quadrics、slabs和buddyinfo等。

同時collectl還能夠替代經常使用工具,好比top、vmstat、ps、iotop等。

安裝collectl:

sudo apt-get install collectl

collectl的使用很簡單,默認collectl顯示cpu、磁盤、網絡信息。

#<----CPU[HYPER]-----><----------Disks-----------><----------Network---------->
#cpu sys inter  ctxsw KBRead  Reads KBWrit Writes   KBIn  PktIn  KBOut  PktOut 
   0   0   162    460      0      0      0      0      0      0      0       0 
   1   0   308    820      0      0     36      1      0      0      0       0 
   1   0   572   2022      0      0     36      2      0      0      0       0 
   0   0   270    728      0      0      0      0      0      0      0       0 

 

collectl還能夠顯示更多的子系統信息,若是選項存在對應的大寫選項,大寫選項表示更細節的設備統計信息。

b – buddy info (內存碎片)

c – 全部CPU的合一統計信息;C - 單個CPU的統計信息。

d – 整個文件系統Disk合一統計信息;C - 單個磁盤的統計信息。

f – NFS V3 Data

i – Inode and File System

j – 顯示每一個CPU的Interrupts觸發狀況;J - 顯示每一箇中斷詳細觸發狀況。

l – Lustre

m – 顯示整個系統Memory使用狀況;M - 按node顯示內存使用狀況。

n – 顯示整個系統的Networks使用狀況;N - 分網卡顯示網絡使用狀況。

s – Sockets

t – TCP

x – Interconnect

y – 對系統全部Slabs (系統對象緩存)使用統計信息;Y - 每一個slab使用的詳細信息。

collectl --all顯示全部子系統的統計信息,包括cpu、終端、內存、磁盤、網絡、TCP、socket、文件系統、NFS。

#<----CPU[HYPER]-----><-----------------Int------------------><-----------------Memory-----------------><----------Disks-----------><----------Network----------><-------TCP--------><------Sockets-----><----Files---><------NFS Totals------>
#cpu sys inter  ctxsw Cpu0 Cpu1 Cpu2 Cpu3 Cpu4 Cpu5 Cpu6 Cpu7 Free Buff Cach Inac Slab  Map   Fragments KBRead  Reads KBWrit Writes   KBIn  PktIn  KBOut  PktOut   IP  Tcp  Udp Icmp  Tcp  Udp  Raw Frag Handle Inodes  Reads Writes Meta Comm 
   5   1   749   2738   79   83   67  126  289   57   87   47   4G 107M   1G 640M 151M   1G nlsrkjebaas      0      0      0      0      0      0      0       0    0    2    0    0 1138    0    1    0  11648  71267      0      0    0    0 
   1   0   276   1323   22    8   12   37   76   19   33   72   4G 107M   1G 640M 151M   1G nlsrkjebaas      0      0     56     13      0      0      0       0    0    0    0    0 1138    0    1    0  11648  71264      0      0    0    0 
   1   0   298   1336   40    9   26   31   75   31   34   49   4G 107M   1G 640M 151M   1G olsrkjebaas      0      0     24      5      0      0      0       0    0    0    0    0 1138    0    1    0  11648  71256      0      0    0    0 

 

collectl --top能夠代替top命令:

# TOP PROCESSES sorted by time (counters are /sec) 12:11:40
# PID  User     PR  PPID THRD S   VSZ   RSS CP  SysT  UsrT Pct  AccuTime  RKB  WKB MajF MinF Command
14557  al       20  7305    0 R   75M   28M  4  0.02  0.05   7  00:00.47    0    0    0    0 /usr/bin/perl 
 6985  al       20     1   36 S    1G  181M  3  0.01  0.03   4  01:48.14    0    4    0    1 /opt/google/chrome/chrome 
 7255  al       20  7000   21 S  955M  215M  1  0.00  0.04   4  01:30.44    0    0    0 1999 /opt/google/chrome/chrome 
 8006  al       20  7000   17 S  923M  135M  0  0.01  0.03   4  01:24.67    0    0    0    0 /opt/google/chrome/chrome 
 7294  al       20  2415    3 S  710M   60M  7  0.01  0.01   2  00:12.79    0    0    0    4 /usr/bin/python 

 

collectl --vmstat能夠代替vmstat命令:

#procs ---------------memory (KB)--------------- --swaps-- -----io---- --system-- ----cpu-----
# r  b   swpd   free   buff  cache  inact active   si   so    bi    bo   in    cs us sy  id wa
  2  0      0  4634M   108M  1535M   642M   481M    0    0     0   132  594  2523  2  0  96  0
  0  0      0  4631M   108M  1539M   642M   481M    0    0     0     0 1006  5308  4  1  93  0
  0  0      0  4623M   108M  1547M   642M   481M    0    0     0    48  564  2572  2  0  96  0

 

collectl -c1 -sZ -i:1能夠代替ps命令。

 

collectl和一些處理分析數據工具(好比colmux、colgui、colplot)結合能提供可視化圖形。

14.2 colplot使用

colplot是collectl工具集的一部分,其將collectl收集的數據在瀏覽器中圖形化展現。

colplot的介紹在此,相關源碼能夠再collectl-utils下載。

解壓下載的colplot以後,sudo ./INSTALL安裝colplot。

安裝以後重啓apache服務:

suod systemctl reload apache2

sudo systemctl restart apache2

在瀏覽器中輸入http://127.0.0.1/colplot/,便可使用colplot。

經過Change Dir選擇存放通過collectl -P保存的數據,而後設置Plot細節、顯示那些子系統、plot大小等等。

最後Generate Plot查看結果。

 

參考文檔:《Collectl: Linux 性能監控的全能冠軍》、《Collectl Documentation》、《Collectl Examples - An Awesome Performance Analysis Tool in Linux

 

0. 其餘

munin、rrdtool

相關文章
相關標籤/搜索