關註上方 浩道Linux ,回復 資料 ,即可獲取海量 L inux 、 Python 、 網路通訊、網路安全 等學習資料!
前言
大家好,這裏是 浩道Linux ,主要給大家分享 L inux 、 P ython 、 網路通訊、網路安全等 相關的IT知識平台。
今天浩道跟大家分享運維工作中,Linux下常見的十幾款CPU監控工具,你可能只會用到其中某些,但是個人覺得作為一個資深運維,你要知道有這些工具可以監控CPU 。
文章來源:https://www.cnblogs.com/arnoldlu/p/9462221.html
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 1100-----------------所有cpu合一的統計資訊
sar -P ALL 1100--------包括cpu合一以及單個cpu的統計資訊
sar -B 1100---------------paging統計資訊
sar -b 1100---------------塊裝置IO統計資訊
sar -d 1100---------------塊裝置活動統計資訊
sar -F 1100----------------掛載的檔案系統統計資訊
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 1020
結果如下:
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
1047257622868855909210617560093910848700
10472576228184559100106175600013153233951068400
1047257622930855910010616160000144634491058500
0047257622959255910810616160006141934741058500
1047257622980455910810616160000144634391058500
上面的參數可以分為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 Command
15時18分21秒 010.020.0018531630280.08 systemd
15時18分21秒 020.000.00000.00 kthreadd
15時18分21秒 040.000.00000.00 kworker/0:0H
15時18分21秒 060.000.00000.00 mm_percpu_wq
15時18分21秒 070.000.00000.00 ksoftirqd/0
15時18分21秒 080.000.00000.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秒 01 -1.00 -1.00 -1.00243523129 systemd
15時20分40秒 02 -1.00 -1.00 -1.000 kthreadd
15時20分40秒 04 -1.00 -1.00 -1.000 kworker/0:0H
15時20分40秒 06 -1.00 -1.00 -1.000 mm_percpu_wq
15時20分40秒 07 -1.00 -1.00 -1.00714512328679 ksoftirqd/0
15時20分40秒 08 -1.00 -1.00 -1.00417757303594 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得到如下結果。
240194063832606752 nomachine_6.0.80_1.exe
# 整個操作總耗時,0.263-0.094-0.011=0.158是IO等待耗時。
real 0m0.263s
# 使用者態耗時
user 0m0.094s
# 內核態耗時
sys 0m0.011s
240194063832606752 nomachine_6.0.80_1.exe
# 第二次執行就可以看出等待IO操作的時間基本上沒有了。
real 0m0.098s
user 0m0.097s
sys 0m0.000s
09. cpustat
透過sudo apt install cpustat安裝,cpustat -T -D -x結果如下。
# 顯示Load Avg資訊和平均頻率等
LoadAvg0.660.540.49, FreqAvg. 1.46GHz, 4CPUs online
# 行程切換次數、硬中斷、軟中斷等等統計資訊。
# CPU占用率、使用者空間和內核空間占用率等。
3791.1Ctxt/s, 1709.9 IRQ/s, 1800.0 softIRQ/s, 0.0new tasks/s, 1 running, 0 blocked
%CPU %USR %SYS PID S CPU TimeTask
25.7425.740.0011435 R 32.29w /usr/bin/python3
15.8415.840.009445 S 01.49w /usr/lib/xorg/Xorg
10.899.900.992722 S 11.05w compiz
7.920.007.9232352 S 216.60s [kworker/2:1]
0.990.000.9932397 R 10.01s cpustat
0.990.990.0011046 S 216.20h compiz
0.990.990.001317 S 08.76h /usr/NX/bin/nxnode.bin
0.990.000.9910293 S 11.24m [kworker/1:2]
64.3653.4710.89Total
LoadAvg0.660.540.49, FreqAvg. 1.75GHz, 4CPUs online
2834.8Ctxt/s, 1190.9 IRQ/s, 1183.3 softIRQ/s, 0.0new tasks/s, 4 running, 0 blocked
%CPU %USR %SYS PID S CPU TimeTask
25.7625.760.0011435 R 32.29w /usr/bin/python3
18.1818.180.009445 S 01.49w /usr/lib/xorg/Xorg
7.587.580.002722 S 11.05w compiz
6.060.006.0632352 S 216.64s [kworker/2:1]
1.520.001.5232397 R 10.02s cpustat
1.520.001.528 S 03.00h [rcu_sched]
1.520.001.5218409 S 01.16m update-notifier
62.1251.5210.61Total
Distribution of CPU utilisation (per Task):
% CPU UtilisationCount (%)
0.00 - 1.9770698.88
1.97 - 3.9400.00
3.94 - 5.9100.00
5.91 - 7.8820.28
7.88 - 9.8500.00
9.85 - 11.8200.00
11.82 - 13.7910.14
13.79 - 15.7600.00
15.76 - 17.7310.14
17.73 - 19.7010.14
19.70 - 21.6700.00
21.67 - 23.6400.00
23.64 - 25.6120.28
25.61 - 27.5700.00
27.58 - 29.5400.00
29.55 - 31.5100.00
31.52 - 33.4800.00
33.48 - 35.4500.00
35.45 - 37.4200.00
37.42 - 39.3910.14
Distribution of CPU utilisation (per CPU):----------------------------------------------各CPU占用率,分使用者空間和內核空間。
CPU# USR% SYS%
017.371.20
18.982.40
20.607.19
325.750.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 Data
i – InodeandFileSystem
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。
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/
更多精彩
關註公眾號 「 浩道Linux 」
浩道Linux ,專註於 Linux系統 的相關知識、 網路通訊 、 網路安全 、 Python相關 知識以及涵蓋IT行業相關技能的學習, 理論與實戰結合,真正讓你在學習工作中真正去用到所學。同時也會分享一些面試經驗,助你找到高薪offer,讓我們一起去學習,一起去進步,一起去漲薪!期待您的加入~~~ 關註回復「資料」可 免費獲取學習資料 (含有電子書籍、視訊等)。
喜歡的話,記得 點「贊」 和 「在看」 哦