14 個 Linux 下 CPU 監控工具

作者:Arnold Lu    原文:

https://www.cnblogs.com/arnoldlu/p/9462221.htm

 

 

 

01. top

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

這裏主要關注CPU資源。

1.1 /proc/loadavg

load average取自/proc/loadavg。

  •  
9.53 9.12 8.37 3/889 28165

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

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

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

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

1.2 top使用

打開top,可以指定更新的週期。

輸入H,打開隱藏的線程;輸入1,可以顯示單核CPU使用情況。

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

top採樣來源你還依賴於/proc/stat和/proc//stat兩個,這兩個的詳細介紹參考:/proc/stat[1]和/proc//stat[2]。

其中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

 

02. perf

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

通過sudo perf top -s comm,可以查看當前系統運行進程佔比。

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

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

 

03. sar和ksar

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

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

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

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

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
# 將 ENABLED=“false“ 改爲ENABLED=“true“$ sudo gedit /etc/default/sysstat
# 修改sar的週期等配置$ sudo gedit /etc/cron.d/sysstat
# 重啓sar服務$ sudo /etc/init.d/sysstat restart
# sar log存放目錄$ ls -l /var/log/sysstat/

使用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[5]》•《Collect and report Linux System Activity Information with sar[6]》。

04. mpstat

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

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

  •  
$ mpstat -P ALL 10 20

結果如下:

 

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

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

05. 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

06. 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]》

07. pidstat

pidstat主要用於監控全部或指定進程佔用系統資源的情況。

7.1 查看CPU使用情況

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

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
# 顯示所有的進程統計信息,包括idle進程。pidstat -p ALL
# 更加詳細的顯示了線程統計信息。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  Command15時18分21秒     0         1      0.02      0.00  185316    3028   0.08  systemd15時18分21秒     0         2      0.00      0.00       0       0   0.00  kthreadd15時18分21秒     0         4      0.00      0.00       0       0   0.00  kworker/0:0H15時18分21秒     0         6      0.00      0.00       0       0   0.00  mm_percpu_wq15時18分21秒     0         7      0.00      0.00       0       0   0.00  ksoftirqd/015時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  Command15時20分40秒     0         1     -1.00     -1.00     -1.00 243523129  systemd15時20分40秒     0         2     -1.00     -1.00     -1.00       0  kthreadd15時20分40秒     0         4     -1.00     -1.00     -1.00       0  kworker/0:0H15時20分40秒     0         6     -1.00     -1.00     -1.00       0  mm_percpu_wq15時20分40秒     0         7     -1.00     -1.00     -1.00 714512328679  ksoftirqd/015時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::拉起進程對應的命令。

08. time

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

比如time cksum nomachine_6.0.80_1.exe得到如下結果。

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
2401940638 32606752 nomachine_6.0.80_1.exe
# 整個操作總耗時,0.263-0.094-0.011=0.158是IO等待耗時。real    0m0.263s
# 用戶態耗時user    0m0.094s
# 內核態耗時sys    0m0.011s2401940638 32606752 nomachine_6.0.80_1.exe
# 第二次執行就可以看出等待IO操作的時間基本上沒有了。real    0m0.098suser    0m0.097ssys    0m0.000s

09. cpustat

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

# 顯示Load Avg信息和平均頻率等Load Avg 0.66 0.54 0.49, Freq Avg. 1.46 GHz, 4 CPUs online# 進程切換次數、硬中斷、軟中斷等等統計信息。# CPU佔用率、用戶空間和內核空間佔用率等。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 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 online2834.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、磁盤、網絡信息。

 

 

collectl還可以顯示更多的子系統信息,如果選項存在對應的大寫選項,大寫選項表示更細節的設備統計信息。

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
b – buddy info (內存碎片)c – 所有CPU的合一統計信息;C - 單個CPU的統計信息。d – 整個文件系統Disk合一統計信息;C - 單個磁盤的統計信息。f – NFS V3 Datai – Inode and File Systemj – 顯示每個CPU的Interrupts觸發情況;J - 顯示每個中斷詳細觸發情況。l – Lustrem – 顯示整個系統Memory使用情況;M - 按node顯示內存使用情況。n – 顯示整個系統的Networks使用情況;N - 分網卡顯示網絡使用情況。s – Socketst – TCPx – Interconnecty – 對系統所有Slabs (系統對象緩存)使用統計信息;Y - 每個slab使用的詳細信息。

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

 

collectl --top可以代替top命令:

 

collectl --vmstat可以代替vmstat命令:

 

collectl -c1 -sZ -i:1可以代替ps命令。

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

14.2 colplot使用

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

colplot的介紹(http://collectl-utils.sourceforge.net/colplot.html),相關源碼可以再collectl-utils]下載:https://sourceforge.net/projects/collectl-utils/files/

解壓下載的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 性能監控的全能冠軍[8]》、

《Collectl Documentation[9]》、《Collectl Examples - An Awesome Performance Analysis Tool in Linux[10]》

 

References

[1] /proc/stat: https://www.cnblogs.com/arnoldlu/p/9187775.html#system_proc_stat
[2] /proc//stat: https://www.cnblogs.com/arnoldlu/p/9187775.html#process_proc_stat
[3] 系統級性能分析工具perf的介紹與使用: https://www.cnblogs.com/arnoldlu/p/6241297.html
[4] ksar: https://sourceforge.net/projects/ksar/
[5] How To Create sar Graphs With kSar To Identifying Linux Bottlenecks: https://www.cyberciti.biz/tips/identifying-linux-bottlenecks-sar-graphs-with-ksar.html
[6] Collect and report Linux System Activity Information with sar: https://www.thomas-krenn.com/en/wiki/Collect_and_report_Linux_System_Activity_Information_with_sar
[7] Linux Performance Measurements using vmstat: https://www.thomas-krenn.com/en/wiki/Linux_Performance_Measurements_using_vmstat
[8] Collectl: Linux 性能監控的全能冠軍: https://linux.cn/article-3154-1.html
[9] Collectl Documentation: http://collectl.sourceforge.net/Documentation.html
[10] Collectl Examples - An Awesome Performance Analysis Tool in Linux: https://linoxide.com/monitoring-2/collectl-tool-install-examples/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章