1. top
top是最常用的查看系統(tǒng)資源使用情況的工具,包括CPU、內(nèi)存等等資源。 這里主要關(guān)注CPU資源。
1.1 /proc/loadavg
load average取自/proc/loadavg。
9.53 9.12 8.37 3/889 28165
前三個(gè)數(shù)字是1、5、15分鐘內(nèi)進(jìn)程隊(duì)列中平均進(jìn)程數(shù),包括正在運(yùn)行的進(jìn)程+準(zhǔn)備好等待運(yùn)行的進(jìn)程。 第四個(gè)數(shù)字分子表示正在運(yùn)行的進(jìn)程數(shù),分母是進(jìn)程總數(shù)。 最后一個(gè)數(shù)字是最近運(yùn)行的進(jìn)程ID號(hào)。 其中top取的是/proc/loadavg的前三個(gè)數(shù)。
1.2 top使用
打開top,可以指定更新的周期。 輸入H,打開隱藏的線程;輸入1,可以顯示單核CPU使用情況。 top -H -b -d 1 -n 200 > top.txt,每個(gè)1秒統(tǒng)計(jì)一次,共200次,顯示線程細(xì)節(jié),并保存到top.txt中。 其中CPU信息對(duì)應(yīng)的含義如下:
us:user,統(tǒng)計(jì)nice小于等于0的用戶空間進(jìn)程,也即優(yōu)先級(jí)為100~120。 ni:nice,統(tǒng)計(jì)nice大于0的用戶空間進(jìn)程,也即優(yōu)先級(jí)為121~139。 sys:system,統(tǒng)計(jì)內(nèi)核態(tài)運(yùn)行時(shí)間,不包括中斷。 id:idle,幾系統(tǒng)處于空閑態(tài)。 wa:iowait,統(tǒng)計(jì)io等待時(shí)間。 hi:hardware interrupt,統(tǒng)計(jì)硬件中斷時(shí)間。 si:software interrupt,統(tǒng)計(jì)軟中斷時(shí)間。 st:steal
?
?
2. perf
這里重點(diǎn)關(guān)注CPU占用率。 通過(guò)sudo perf top -s comm,可以查看當(dāng)前系統(tǒng)運(yùn)行進(jìn)程占比。 這里不像top一樣區(qū)分idle、system、user,這里的占比是各個(gè)進(jìn)程在總運(yùn)行時(shí)間里面占比。 通過(guò)sudo perf record記錄采樣信息,然后通過(guò)sudo perf report -s comm。
3. sar和ksar
sar是System Activity Report的意思,可以用于實(shí)時(shí)觀察當(dāng)前系統(tǒng)活動(dòng),也可以生成歷史記錄的報(bào)告。 要使用sar需要安裝sudo apt install sysstat,然后對(duì)sysstat進(jìn)行配置。 sar用于記錄統(tǒng)計(jì)信息,ksar用于將記錄的信息圖形化輸出。 ksar下載地址在:https://github.com/vlsi/ksar/releases。
#?將 ENABLED=“false“ 改為ENABLED=“true“ $?sudo gedit /etc/ default /sysstat #?修改sar的周期等配置 $?sudo gedit /etc/cron.d/sysstat #?重啟sar服務(wù) $?sudo /etc/init.d/sysstat restart #?sar?log存放目錄 $?ls -l / var /log/sysstat/使用sar記錄開機(jī)到目前的統(tǒng)計(jì)信息到文件sar.txt。
LC_ALL=C sar -A > sar.txtPS:這里直接使用sar -A,在ksar中無(wú)法正常顯示。 如下執(zhí)行java -jar ksar.jar,然后Data->Load from text file...選擇保存的sar.txt文件。 得到如下的圖表。
?
?
還可以通過(guò)sar記錄一段時(shí)間的信息,指定采樣周期和采樣次數(shù)。 這些命令前加上LC_ALL=C之后保存到文件中,都可以在ksar中圖形化顯示。
sar 1 100-----------------所有cpu合一的統(tǒng)計(jì)信息 sar -P ALL 1 100--------包括cpu合一以及單個(gè)cpu的統(tǒng)計(jì)信息 sar -B 1 100---------------paging統(tǒng)計(jì)信息 sar -b 1 100---------------塊設(shè)備IO統(tǒng)計(jì)信息 sar -d 1 100---------------塊設(shè)備活動(dòng)統(tǒng)計(jì)信息 sar -F 1 100----------------掛載的文件系統(tǒng)統(tǒng)計(jì)信息 sar -r ALL------------------ 顯示詳細(xì)的內(nèi)存使用統(tǒng)計(jì)信息 sar -S?------------------------顯示swap空間使用情況統(tǒng)計(jì)信息 sar -w----------------------- 顯示進(jìn)程創(chuàng)建以及進(jìn)程切換統(tǒng)計(jì)信息 sar -W-----------------------顯示swap換入換出統(tǒng)計(jì)信息。
4. mpstat
mpstat是Multiprocessor Statistics。當(dāng)沒(méi)有參數(shù)時(shí),mpstat顯示系統(tǒng)系統(tǒng)以來(lái)所有信息平均值。 常見用法如下,-P ALL監(jiān)控所有CPU,細(xì)節(jié)顯示特定CPU;10表示每10秒監(jiān)控一次;20表示監(jiān)控20次
$?mpstat -P ALL 10 20結(jié)果如下:
?
?
usr表示用戶空間進(jìn)程,nice表示nice值大于0的用戶空間進(jìn)程。 sys是內(nèi)核空間,iowait是I/O等待時(shí)間,irq是硬中斷,soft是軟中斷,idle是空閑時(shí)間,guest和gnice都是虛擬機(jī)時(shí)間。
5. uptime
uptime是一個(gè)簡(jiǎn)單獲取系統(tǒng)總共運(yùn)行多長(zhǎng)時(shí)間,以及最近1分鐘、5分鐘、15分鐘的平均負(fù)載。 uptime通過(guò)/proc/uptime和/proc/loadavg獲取相關(guān)信息。 up前是當(dāng)前系統(tǒng)時(shí)間,up后是系統(tǒng)運(yùn)行時(shí)長(zhǎng)。 load average后是1分鐘、5分鐘、15分鐘平均負(fù)載。
11:15:41?up?82?days, 20:34, 8?users,?load?average: 0.28, 0.40, 0.43
6. vmstat
vmstat主要用于監(jiān)控系統(tǒng)內(nèi)存使用情況的工具,但是也包含一些CPU相關(guān)信息。 使用方法vmstat 5 5表示運(yùn)行5次,每次5秒。結(jié)果如下:
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上面的參數(shù)可以分為6大部分:進(jìn)程、內(nèi)存、swap、io、中斷和進(jìn)程切換、cpu。
?
?
更加詳細(xì)的解釋:
7. pidstat
pidstat主要用于監(jiān)控全部或指定進(jìn)程占用系統(tǒng)資源的情況。
7.1 查看CPU使用情況
pidstat首次運(yùn)行時(shí)顯示自系統(tǒng)啟動(dòng)開始的各項(xiàng)統(tǒng)計(jì)信息,之后運(yùn)行pidstat將顯示自上次運(yùn)行該命令以后的統(tǒng)計(jì)信息。用戶可以通過(guò)指定統(tǒng)計(jì)的次數(shù)和時(shí)間來(lái)獲得所需的統(tǒng)計(jì)信息。
#?顯示所有的進(jìn)程統(tǒng)計(jì)信息,包括idle進(jìn)程。 pidstat -p ALL #?更加詳細(xì)的顯示了線程統(tǒng)計(jì)信息。 pidstat -p ALL -t #?周期采樣和采樣次數(shù) pidstat [option] interval [count]除此之外還可以通過(guò)-p獲取指定進(jìn)程的統(tǒng)計(jì)信息。 pidstat還可以通過(guò)-r獲取內(nèi)存使用統(tǒng)計(jì)信息,通過(guò)-d獲取IO使用統(tǒng)計(jì)信息。
7.2 查看內(nèi)存使用情況
pidstat -p ALL -r結(jié)果如下:
15時(shí)18分21秒?UID????PID??minflt/s??majflt/s??VSZ???RSS???%MEM??Command 15時(shí)18分21秒?0?????1????0.02????0.00??185316???3028??0.08??systemd 15時(shí)18分21秒?0?????2????0.00????0.00????0????0???0.00??kthreadd 15時(shí)18分21秒?0?????4????0.00????0.00????0????0???0.00??kworker/0:0H 15時(shí)18分21秒?0?????6????0.00????0.00????0????0???0.00??mm_percpu_wq 15時(shí)18分21秒?0? ? ??7????0.00????0.00????0????0???0.00??ksoftirqd/0 15時(shí)18分21秒?0?????8????0.00????0.00????0????0???0.00??rcu_schedminflt/s: 每秒次缺頁(yè)錯(cuò)誤次數(shù)(minor page faults),次缺頁(yè)錯(cuò)誤次數(shù)意即虛擬內(nèi)存地址映射成物理內(nèi)存地址產(chǎn)生的page fault次數(shù)。 majflt/s: 每秒主缺頁(yè)錯(cuò)誤次數(shù)(major page faults),當(dāng)虛擬內(nèi)存地址映射成物理內(nèi)存地址時(shí),相應(yīng)的page在swap中,這樣的page fault為major page fault,一般在內(nèi)存使用緊張時(shí)產(chǎn)生。 VSZ: 該進(jìn)程使用的虛擬內(nèi)存(以kB為單位)。 RSS: 該進(jìn)程使用的物理內(nèi)存(以kB為單位)。 %MEM: 該進(jìn)程使用內(nèi)存的百分比。 Command: 拉起進(jìn)程對(duì)應(yīng)的命令。
7.3 查看磁盤使用情況
pidstat -p ALL -d結(jié)果如下:
15時(shí)20分40秒?UID???????PID???kB_rd/s???kB_wr/s?kB_ccwr/s?iodelay??Command 15時(shí)20分40秒?0?????????1?????-1.00?????-1.00?????-1.00?243523129??systemd 15時(shí)20分40秒?0?????????2?????-1.00?????-1.00?????-1.00???????0??kthreadd 15時(shí)20分40秒?0?????????4?????-1.00?????-1.00?????-1.00???????0??kworker/0:0H 15時(shí)20分40秒?0?????????6?????-1.00?????-1.00?????-1.00???????0??mm_percpu_wq 15時(shí)20分40秒?0?????????7?????-1.00?????-1.00?????-1.00?714512328679??ksoftirqd/0 15時(shí)20分40秒?0?????????8?????-1.00?????-1.00?????-1.00?417757303594??rcu_sched
kB_rd/s: 每秒進(jìn)程從磁盤讀取的數(shù)據(jù)量(以kB為單位)。
kB_wr/s: 每秒進(jìn)程向磁盤寫的數(shù)據(jù)量(以kB為單位)。
kB_ccwr/s:每秒進(jìn)程被取消向磁盤寫的數(shù)據(jù)量(以kB為單位)。
Command::拉起進(jìn)程對(duì)應(yīng)的命令。
8. time
time命令可以被用于統(tǒng)計(jì)指定程序的CPU耗時(shí)。 比如time cksum nomachine_6.0.80_1.exe得到如下結(jié)果。
2401940638?32606752?nomachine_6.0.80_1.exe # 整個(gè)操作總耗時(shí),0.263-0.094-0.011=0.158是IO等待耗時(shí)。 real????0m0.263s # 用戶態(tài)耗時(shí) user?0m0.094s # 內(nèi)核態(tài)耗時(shí) sys?0m0.011s 2401940638?32606752?nomachine_6.0.80_1.exe # 第二次執(zhí)行就可以看出等待IO操作的時(shí)間基本上沒(méi)有了。 real????0m0.098s user?0m0.097s sys?0m0.000s
9. cpustat
通過(guò)sudo apt install cpustat安裝,cpustat -T -D -x結(jié)果如下。
# 顯示Load Avg信息和平均頻率等 Load Avg?0.66?0.54?0.49, Freq Avg.?1.46?GHz,?4?CPUs online # 進(jìn)程切換次數(shù)、硬中斷、軟中斷等等統(tǒng)計(jì)信息。 # CPU占用率、用戶空間和內(nèi)核空間占用率等。 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占用率,分用戶空間和內(nèi)核空間。 ?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,可以看到進(jìn)程里面的線程,樹形結(jié)構(gòu)表示了父子關(guān)系。
11. atop
atop是一個(gè)監(jiān)控系統(tǒng)資源和進(jìn)程的工具。它通過(guò)CPU使用率來(lái)對(duì)列表中的進(jìn)程進(jìn)行降序排列,而每一個(gè)進(jìn)程則包含了CPU、內(nèi)存、磁盤和網(wǎng)絡(luò)狀態(tài)等信息。它的功能與top和htop類似。
12. glances
glances是一個(gè)由python編寫的,與Nmon功能類似的報(bào)告工具,它能夠報(bào)告統(tǒng)計(jì)cpu、內(nèi)存、網(wǎng)絡(luò)、磁盤和進(jìn)程。除了報(bào)告統(tǒng)計(jì),glances不支持任何其他特性或功能。當(dāng)程序運(yùn)行時(shí)點(diǎn)擊“h”可以顯示幫助頁(yè)面。
13. nmon
Nmon是一個(gè)非常容易使用,能夠在一個(gè)屏幕上監(jiān)視CPU、內(nèi)存、網(wǎng)絡(luò)、磁盤使用狀況和進(jìn)程列表的工具。除了無(wú)法管理進(jìn)程和修改報(bào)告顯示,Nmon與那些只用于報(bào)告的報(bào)告工具完全一樣。另外,它可以將數(shù)據(jù)保存到電子表格文件。
14. pcp-gui
Performance Co-Pilot,簡(jiǎn)稱PCP,是一個(gè)系統(tǒng)性能和分析框架。它從多個(gè)主機(jī)整理數(shù)據(jù)并實(shí)時(shí)的分析,幫你識(shí)別不正常的表現(xiàn)模式。它也提供API讓你設(shè)計(jì)自己的監(jiān)控和報(bào)告解決方案。 安裝pcp相關(guān)工具。
$?sudo apt install pcp pcp-guiFile->Open View選擇需要打開的視圖,比如CPU、Disk、Memory等。
?
?
15. collectl和colplot
15.1 collectl使用
collectl是一款非常優(yōu)秀并且有著豐富的命令行功能的實(shí)用程序,你可以用它來(lái)采集描述當(dāng)前系統(tǒng)狀態(tài)的性能數(shù)據(jù)。 不同于大多數(shù)其它的系統(tǒng)監(jiān)控工具,collectl 并非僅局限于有限的系統(tǒng)度量,相反,它可以收集許多不同類型系統(tǒng)資源的相關(guān)信息,如 cpu 、disk、memory 、network 、sockets 、 tcp 、inodes 、infiniband 、 lustre 、memory、nfs、processes、quadrics、slabs和buddyinfo等。 同時(shí)collectl還可以替代常用工具,比如top、vmstat、ps、iotop等。 安裝collectl:
sudo apt-get?install?collectlcollectl的使用很簡(jiǎn)單,默認(rèn)collectl顯示cpu、磁盤、網(wǎng)絡(luò)信息。
?
?
collectl還可以顯示更多的子系統(tǒng)信息,如果選項(xiàng)存在對(duì)應(yīng)的大寫選項(xiàng),大寫選項(xiàng)表示更細(xì)節(jié)的設(shè)備統(tǒng)計(jì)信息。
?
b?–?buddy?info?(內(nèi)存碎片) c?– 所有CPU的合一統(tǒng)計(jì)信息;C?-?單個(gè)CPU的統(tǒng)計(jì)信息。 d?– 整個(gè)文件系統(tǒng)Disk合一統(tǒng)計(jì)信息;C?-?單個(gè)磁盤的統(tǒng)計(jì)信息。 f?–?NFS?V3?Data i?–?Inode?and?File?System j?– 顯示每個(gè)CPU的Interrupts觸發(fā)情況;J?-?顯示每個(gè)中斷詳細(xì)觸發(fā)情況。 l?–?Lustre m?– 顯示整個(gè)系統(tǒng)Memory使用情況;M?-?按node顯示內(nèi)存使用情況。 n?– 顯示整個(gè)系統(tǒng)的Networks使用情況;N?-?分網(wǎng)卡顯示網(wǎng)絡(luò)使用情況。 s?–?Sockets t?–?TCP x?–?Interconnect y?– 對(duì)系統(tǒng)所有Slabs?(系統(tǒng)對(duì)象緩存)使用統(tǒng)計(jì)信息;Y?-?每個(gè)slab使用的詳細(xì)信息。collectl --all顯示所有子系統(tǒng)的統(tǒng)計(jì)信息,包括cpu、終端、內(nèi)存、磁盤、網(wǎng)絡(luò)、TCP、socket、文件系統(tǒng)、NFS。
collectl --top可以代替top命令:
collectl --vmstat可以代替vmstat命令:
collectl -c1 -sZ -i:1可以代替ps命令。 collectl和一些處理分析數(shù)據(jù)工具(比如colmux、colgui、colplot)結(jié)合能提供可視化圖形。
15.2 colplot使用
colplot是collectl工具集的一部分,其將collectl收集的數(shù)據(jù)在瀏覽器中圖形化展示。 colplot的介紹(http://collectl-utils.sourceforge.net/colplot.html),相關(guān)源碼可以再collectl-utils]下載:https://sourceforge.net/projects/collectl-utils/files/ 解壓下載的colplot之后,sudo ./INSTALL安裝colplot。 安裝之后重啟apache服務(wù):
$suod systemctl reload apache2 $sudo systemctl restart apache2在瀏覽器中輸入http://127.0.0.1/colplot/,即可使用colplot。 通過(guò)Change Dir選擇存放經(jīng)過(guò)collectl -P保存的數(shù)據(jù),然后設(shè)置Plot細(xì)節(jié)、顯示那些子系統(tǒng)、plot大小等等。
?
?
最后Generate Plot查看結(jié)果。
編輯:黃飛
評(píng)論
查看更多