關鍵詞:top、perf、sar、ksar、mpstat、uptime、vmstat、pidstat、time、cpustat、munin、htop、glances、atop、nmon、pcp-gui、collectl,
1. 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/<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》
本文轉載自:Arnold Lu@南京
原文鏈接:https://www.cnblogs.com/arnoldlu/p/9462221.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/148738.html
標籤:Linux
