值得收藏!介紹15個Linux下 CPU 監控工具

1. top

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

這裏主要關注CPU資源。java

1.1 /proc/loadavg

load average取自/proc/loadavg。node

9.53 9.12 8.37 3/889 28165

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

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

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

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

1.2 top使用

打開top,能夠指定更新的週期。redis

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

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

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

這裏重點關注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/...

# 將 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統計信息s
ar -d 1 100---------------塊設備活動統計信息
sar -F 1 100----------------掛載的文件系通通計信息
sar -r ALL------------------ 顯示詳細的內存使用統計信息
sar -S ------------------------顯示swap空間使用狀況統計信息
sar -w----------------------- 顯示進程建立以及進程切換統計信息
sar -W-----------------------顯示swap換入換出統計信息。

4. 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都是虛擬機時間。

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。

更加詳細的解釋:

7. 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 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  
# 整個操做總耗時,0.263-0.094-0.011=0.158是IO等待耗時。  
real 0m0.263s  
# 用戶態耗時  
user 0m0.094s  
# 內核態耗時  
sys 0m0.011s  
2401940638 32606752 nomachine_6.0.80_1.exe  
# 第二次執行就能夠看出等待IO操做的時間基本上沒有了。  
real 0m0.098s  
user 0m0.097s  
sys 0m0.000s

**9. 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 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與那些只用於報告的報告工具徹底同樣。另外,它能夠將數據保存到電子表格文件。

14. pcp-gui

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

安裝pcp相關工具。

$ sudo apt install pcp pcp-gui

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

15. collectl和colplot

15.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)結合能提供可視化圖形。

15.2 colplot使用

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

colplot的介紹(http://collectl-utils.sourcef...,相關源碼能夠再collectl-utils]下載:https://sourceforge.net/proje...

解壓下載的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查看結果。

做者:Arnold Lu
連接: https://www.cnblogs.com/arnol...

最新整理的 2TB 技術乾貨:包括架構師實戰教程、大數據、Docker容器、系統運維、數據庫、redis、MongoDB、電子書、Java基礎課程、Java實戰項目、ELK Stack、機器學習、BAT面試精講視頻等。只需在 民工哥技術之路」微信公衆號對話框回覆關鍵字:1024 便可獲取所有資料。

相關文章
相關標籤/搜索