作為Linux系統監控工具,Collectl是款值得推薦的軟件,使用Collectl能夠及時掌握系統的運行狀況,還能像iotop命令一樣使用collectl進行智能統計,下面小編就給大家介紹下Collectl的安裝及使用。
系統資源監控
Collectl作為一個輕量級的監控工具,在同類工具中是功能最全的。用戶可監測不同的復雜系統矩陣值,並可保留數據以做之後的分析。不同於其他只用來監測特定系統參數的工具,Collectl可以同時監測不同的變量,並以合適的方式記錄它們。
不同於或聚焦於一小組統計數據、采用唯一輸出方式,或采用迭代、作為守護進程運行的大部分監測工具,collectl可以同時全部實現。用戶可選擇各種子系統中的任一系統來監測包括內存,CPU,磁盤,索引節點,無線帶寬,lustre,內存,網絡,網絡文件系統,進程,二次型,slabs,套接口及TCP等信息。
深入學習前讓我們先看以下命令。
$ collectl
waiting for1 second sample.。。
#《--------CPU--------》《----------Disks-----------》《----------Network----------》
#cpu sys inter ctxsw KBRead Reads KBWrit Writes KBIn PktIn KBOut PktOut
00864177200000100
521338273400820001
1012222647009230201
107631722008030102
CPU使用率,磁盤輸入輸出和網絡活動以每秒為單位來加載。對可以理解這些數據的人來說這些信息很容易讀懂。這項列表在給定的時間間隔裡會持續增加,並可直接形成一項文件跟蹤日志。collectl工具提供了各種命令來對這些數據進行記錄,查找及做其他處理。
安裝collectl工具
對Ubuntu/Debian用戶來說Collectl是默認資源,所以使用apt命令便可獲取。
$ sudo apt-get install collectl
Fedora/CentOS用戶使用yum命令便可獲取。
$ yum install collectl
使用
必要的了解 - Collectl子系統
子系統是可檢測到的不同系統資源類型。像CPU,內存,帶寬等等都可構成一個子系統。只運行collectl命令將以批處理模式輸出CPU,磁盤和網絡子系統信息,我們在上文已看到相關內容。
從操作說明可以看到,Collectl可以識別以下子系統。
總計子系統
b - buddy info (內存片段)
c - CPU
d -Disk
f - NFS V3 Data
i -InodeandFileSystem
j -Interrupts
l -Lustre
m -Memory
n -Networks
s -Sockets
t - TCP
x -Interconnect
y -Slabs(system object caches)
細節子系統
這是一系列的詳細信息,大部分情況下都會由相應的總計數據衍生出來。目前“環境變量”和“進程”2類沒有相應的總計數據。如果有3個磁盤,選擇-sd,將只會看到3個磁盤組合出的單一信息。如果選擇-sD,將會分別顯示各磁盤信息。
C - CPU
D -Disk
E -Environmental data (fan, power, temp), via ipmitool
F - NFS Data
J -Interrupts
L -Lustre OST detail OR client Filesystem detail
M -Memory node data, which is also known as numa data
N -Networks
T -65 TCP counters only available in plot format
X -Interconnect
Y -Slabs(system object caches)
Z -Processes
使用“-s”來監測特定的子系統並向其添加子系統的識別項。現在讓我們舉幾個例子。
1. 監測cpu使用率
用“-sc”實現CPU總使用率的監測
$ collectl -sc
waiting for1 second sample.。。
#《--------CPU--------》
#cpu sys inter ctxsw
3018003729
3017673599
使用“-C”觀察各個單獨的CPU使用情況。結果將會輸出多行,分別對應一個CPU。
$ collectl -sC
waiting for1 second sample.。。
# SINGLE CPU STATISTICS
# Cpu User Nice Sys Wait IRQ Soft Steal Idle
0300000096
1300000096
2200000097
3100000098
0200000097
1202000095
2100000098
3401000095
如果需要,可以同時使用C和c來獲取單項CPU監測數據和匯總數據。
2. 內存監測
使用m子系統查看內存。
$ collectl -sm
waiting for1 second sample.。。
#《-----------Memory-----------》
#Free Buff Cach Inac Slab Map
2G220M1G1G210M3G
2G220M1G1G210M3G
2G220M1G1G210M3G
不難解釋。 M用來查看更多內存的詳細信息。
$ collectl -sM
waiting for1 second sample.。。
# MEMORY STATISTICS
# Node Total Used Free Slab Mapped Anon Locked Inact Hit%
07975M5939M2036M215720K372184K06652K1434M0
07975M5939M2036M215720K372072K06652K1433M0
3. 查看磁盤使用情況
d和D可以查看磁盤使用的概況和詳細情況。
$ collectl -sd
waiting for1 second sample.。。
#《----------Disks-----------》
#KBRead Reads KBWrit Writes
4113624
008013
$ collectl -sD
waiting for1 second sample.。。
# DISK STATISTICS (/sec)
# 《---------reads---------》《---------writes---------》《--------averages--------》 Pct
#Name KBytes Merged IOs Size KBytes Merged IOs Size RWSize QLen Wait SvcTim Util
sda 0000000000000
sda 0000000000000
sda 10211715322621
sda 0000921151818112125
“--verbose”命令可以用來查看附加信息。和D命令不同,它將概況擴展,包含了更多信息。
$ collectl -sd --verbose
4. 同時報告多系統情況
如果想要同時得到CPU,內存和磁盤報告,那麼同時使用子命令組合來實現。
$ collectl -scmd
waiting for1 second sample.。。
#《--------CPU--------》《-----------Memory-----------》《----------Disks-----------》
#cpu sys inter ctxsw Free Buff Cach Inac Slab Map KBRead Reads KBWrit Writes
40218743341G221M1G1G210M3G0000
30189640651G221M1G1G210M3G00205
5. 顯示統計時間
若要將每行的監測信息和時間一同顯示,使用T選項。通過在“-o”參數來指定。
$ collectl -scmd -oT
waiting for1 second sample.。。
# 《--------CPU--------》《-----------Memory-----------》《----------Disks-----------》
#Time cpu sys inter ctxsw Free Buff Cach Inac Slab Map KBRead Reads KBWrit Writes
12:03:0530196140131G225M1G1G212M3G0000
12:03:0630188438101G225M1G1G212M3G0000
12:03:0730201140601G225M1G1G212M3G0000
使用“-oTm”可將時間換成毫秒顯示。
6. 改變樣本計數
collectl報告的每行都是一份快照或樣本,它通常設定定期間隔如1秒來取樣。i可用來設置時間間隔,c用來設置樣本計數。
$ collectl -c1 -sm
waiting for1 second sample.。。
#《-----------Memory-----------》
#Free Buff Cach Inac Slab Map
1G261M1G1G228M3G
使用i命令可改變更新時間間隔。
$ collectl -sm -i2
waiting for2 second sample.。。
#《-----------Memory-----------》
#Free Buff Cach Inac Slab Map
1G261M1G1G229M3G
上面的命令設定每2秒收集一次內存信息。
7. 像iotop一樣使用collectl
top命令將collectl像iostat/top工具一樣進行智能統計。列表會持續更新,且可以使用不同字段實現排序。
$ collectl --top iokb
輸出如下
# TOP PROCESSES sorted by iokb (counters are /sec) 09:44:57
# PID User PR PPID THRD S VSZ RSS CP SysT UsrT Pct AccuTime RKB WKB MajF MinF Command
3104 enlighte 2026833 S 938M33M00.000.00000:09.160400/usr/bin/ktorrent
1 root 2000 S 26M3M20.000.00000:01.300000/sbin/init
2 root 2000 S 0030.000.00000:00.000000 kthreadd
3 root 2020 S 0000.000.00000:00.020000 ksoftirqd/0
4 root 2020 S 0000.000.00000:00.000000 kworker/0:0
5 root 020 S 0000.000.00000:00.000000 kworker/0:0H
7 root RT 20 S 0000.000.00000:00.080000 migration/0
8 root 2020 S 0020.000.00000:00.000000 rcu_bh
9 root 2020 S 0000.000.00000:00.000000 rcuob/0
上面的輸出很像top命令,並且它以磁盤數量降序排列進程。
若只想顯示上面的5項進程,可用以下命令實現
$ collectl --top iokb,5
若想學習上面的列表裡哪些字段可以排序,使用如下命令
$ collectl --showtopopts
下面是應用於進程或數據的最高排序類型列表。某些情況下你可能會使用某一字段進行排序,但它並非顯示的一部分。
TOP PROCESS SORT FIELDS
進程排序字段
Memory
vsz virtual memory
rss resident (physical) memory
Time
syst system time
usrt user time
time total time
accum accumulated time
I/O
rkb KB read
wkb KB written
iokb total I/O KB
rkbc KB read from pagecache
wkbc KB written to pagecache
iokbc total pagecacge I/O
ioall total I/O KB (iokb+iokbc)
rsys read system calls
wsys write system calls
iosys total system calls
iocncl Cancelled write bytes
PageFaults
majf major page faults
minf minor page faults
flt total page faults
ContextSwitches
vctx volunary context switches
nctx non-voluntary context switches
Miscellaneous(best when used with--procfilt)
cpu cpu number
pid process pid
thread total process threads (not counting main)
TOP SLAB SORT FIELDS
numobj total number of slab objects
actobj active slab objects
objsize sizes of slab objects
numslab number of slabs
objslab number of objects in a slab
totsize total memory sizes taken by slabs
totchg change in memory sizes
totpct percent change in memory sizes
name slab names
8. 像top一樣使用collectl
為使collectl像top,我們只需以CPU使用率排序輸出進程。
$ collectl --top
輸出如下
# TOP PROCESSES sorted by time (counters are /sec) 14:08:46
# PID User PR PPID THRD S VSZ RSS CP SysT UsrT Pct AccuTime RKB WKB MajF MinF Command
9471 enlighte 2091020 R 63M22M30.030.101300:00.810003/usr/bin/perl
3076 enlighte 2026832 S 521M40M20.000.03300:55.140002/usr/bin/yakuake
3877 enlighte 20335641 S 1G218M10.000.03310:10.500000/opt/google/chrome/chrome
4625 enlighte 20289536 S 1G241M20.000.02208:24.3900012/usr/lib/firefox/firefox
5638 enlighte 2033563 S 1G265M10.000.02209:55.040002/opt/google/chrome/chrome
1186 root 2011524 S 502M76M00.000.01103:02.960000/usr/bin/X
1334 www-data 2013290 S 87M1M20.000.01100:00.850000 nginx:
上面的命令也可用於顯示子系統信息。
$ collectl --top -scm
9. 像ps一樣列出進程
為像ps命令一樣列出所有進程且沒有後續更新,用“c”命令讓其計數至1. $ collectl -c1 -sZ -i:1
上面的命令將會列出類似“ps -e”命令的所有進程。“procfilt”用於從所有進程中過濾出特定的進程信息。“procopts”用於指定另一組微調進程列表顯示的命令。
10. 像vmstat一樣使用collectl
Collectl有內置命令來完成像vmstat一樣的功能。
$ collectl --vmstat
waiting for1 second sample.。。
#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
1001733M242M1922M1137M710M0001081982391820951
1001733M242M1922M1137M710M00001906388610980
1001733M242M1922M1137M710M00001739348030960
11. 子系統的詳細信息
下面的命令以一秒為間隔,統計5次CPU信息並和時間一起顯示出詳細信息(冗長)。
$ collectl -sc -c5 -i1 --verbose -oT
waiting for1 second sample.。。
# CPU SUMMARY (INTR, CTXSW & PROC /sec)
#Time User Nice Sys Wait IRQ Soft Steal Idle CPUs Intr Ctxsw Proc RunQ Run Avg1 Avg5 Avg15 RunT BlkT
14:22:101100000087413122691086610.780.860.7810
14:22:111500000084412832496086610.780.860.7810
14:22:121700000082413422658086600.780.860.7800
14:22:131500000084412412429086610.780.860.7810
14:22:141100000088412702488086600.800.870.7800
改變“-s”變量查看不同的子系統。
總結
本文的介紹不過是對collectl這個強大工具的一些淺見。本文本希望展示它有多靈活,其實通過以上的討論讓我們了解了包括記錄及回尋捕獲的數據,以多種文件格式導出數據並將數據轉換為可被廣泛的工具分析的格式等等功能的實現。
collectl提供的另一大功能便是像服務一樣運行,對遠程Linux機器或完整的服務器集群提供遠程監控,其表現堪稱完美。
Collectl同另一批可用於處理分析收集數據的名為Collectl實用工具 (colmux, colgui, colplot)的功能相契合。
上面就是Linux安裝和使用Collectl的方法介紹了,Collectl能夠完成像ps、top、vmstat這些監控命令一樣的功能,且還有其他的功能,比單純的使用命令簡單。