collectl:一款高級的Linux一體化性能監(jiān)測工具
譯文對Linux系統(tǒng)管理員來說,最重要的任務(wù)莫過于確保他或她管理的系統(tǒng)處于非常良好的情況。Linux系統(tǒng)管理員可以使用好多工具,幫助監(jiān)測和顯示系統(tǒng)里面的進(jìn)程,比如top和htop,但這些工具沒有一個比得上collectl。
collectl:Linux性能監(jiān)測工具
collectl是一款非常棒的、功能豐富的命令實用工具,它可以用來收集描述系統(tǒng)當(dāng)前狀況的性能數(shù)據(jù)。不像大多數(shù)其他的監(jiān)測工具,collectl并不著眼于數(shù)量有限的系統(tǒng)衡量指標(biāo),而是可以收集關(guān)于許多不同類型的系統(tǒng)資源的信息,比如處理器、磁盤、內(nèi)存、網(wǎng)絡(luò)、套接字、TCP、索引節(jié)點、Infiniband、Lustre、NFS、進(jìn)程、quadric、slab和伙伴系統(tǒng)信息等資源。
使用collectl的一個非常好的方面是,它還能扮演像top、ps和iotop另外許多這些只針對某個特定用途設(shè)計的實用工具的角色。那么,哪些功能特性讓colleclt成為一款實用工具呢?
我在進(jìn)行了大量的研究后,整理出了一份清單,為大家列出了collectl命令行實用工具的一些最重要的功能特性。
collectl的功能特性
◦它能夠以交互式運行、作為守護(hù)程序運行,或者兩者兼而有之。
◦它能夠顯示采用多種格式的輸出結(jié)果。
◦它能夠監(jiān)測幾乎任何一個子系統(tǒng)。
◦它能扮演像ps、top、iotop或vmstat這些另外許多實用工具的角色。
◦它能夠記錄并回放捕獲的數(shù)據(jù)。
◦它能夠以眾多文件格式導(dǎo)出數(shù)據(jù)。(如果你想借助外部工具來分析數(shù)據(jù),這項功能就非常有用)。
◦它能夠作為一項服務(wù)來運行,以監(jiān)測遠(yuǎn)程機(jī)器或整個服務(wù)器集群。
◦它能夠在終端中顯示數(shù)據(jù),并將數(shù)據(jù)寫入到文件或套接字。
如何在Linux中安裝collectl?
collectl實用工具可以在所有Linux發(fā)行版上運行,它只需要perl就能運行,所以確保你在機(jī)器中安裝collectl之前已在機(jī)器中安裝了Perl。
在Debian/Ubuntu/Linux Mint上
下面這個命令可用于將collectl實用工具安裝在基于Debian的機(jī)器上,比如Ubuntu。
- $ sudo apt-get install collectl
在RHEL/CentOS/Fedora上
如果你使用基于紅帽的發(fā)行版,很容易借助yum命令,從軟件庫獲取它。
- # yum install collectl
collectl實用工具的一些實際例子
一旦collectl工具安裝完畢,你很容易從終端來運行它,甚至不帶任何選項。下面這個命令將以一種非常簡短而易于閱讀的格式,顯示關(guān)于處理器、磁盤和網(wǎng)絡(luò)統(tǒng)計數(shù)字等的信息。
- # collectl
- waiting for 1 second sample...
- #
- #cpu sys inter ctxsw KBRead Reads KBWrit Writes KBIn PktIn KBOut PktOut
- 13 5 790 1322 0 0 92 7 4 13 0 5
- 10 2 719 1186 0 0 0 0 3 9 0 4
- 12 0 753 1188 0 0 52 3 2 5 0 6
- 13 2 733 1063 0 0 0 0 1 1 0 1
- 25 2 834 1375 0 0 0 0 1 1 0 1
- 28 2 870 1424 0 0 36 7 1 1 0 1
- 19 3 949 2271 0 0 44 3 1 1 0 1
- 17 2 809 1384 0 0 0 0 1 6 0 6
- 16 2 732 1348 0 0 0 0 1 1 0 1
- 22 4 993 1615 0 0 56 3 1 2 0 3
大家可以從終端屏幕中顯示的上述輸出結(jié)果中看到,處理命令輸出中的系統(tǒng)衡量標(biāo)準(zhǔn)值非常容易,因為它就顯示在單單一行上。
collectl實用工具不帶任何選項執(zhí)行后,它顯示了關(guān)于下列子系統(tǒng)的信息:
◦處理器
◦磁盤
◦網(wǎng)絡(luò)
注意:在我們這個例子中,子系統(tǒng)是指可以測量的每一種系統(tǒng)資源。
你還可以顯示除slab之外的所有子系統(tǒng)的統(tǒng)計數(shù)字,只要結(jié)合該命令和–all選項,如下所示。
- # collectl --all
- waiting for 1 second sample...
- #
- #cpu sys inter ctxsw Cpu0 Cpu1 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
- 16 3 817 1542 430 390 1G 175M 1G 683M 193M 1G nsslkjjebbk 0 0 24 3 1 1 0 1 0 0 0 0 623 0 0 0 8160 240829 0 0 0 0
- 11 1 745 1324 316 426 1G 175M 1G 683M 193M 1G nsslkjjebbk 0 0 0 0 0 3 0 2 0 0 0 0 622 0 0 0 8160 240828 0 0 0 0
- 15 2 793 1683 371 424 1G 175M 1G 683M 193M 1G ssslkjjebbk 0 0 0 0 1 1 0 1 0 0 0 0 622 0 0 0 8160 240829 0 0 0 0
- 16 2 872 1875 427 446 1G 175M 1G 683M 193M 1G ssslkjjebbk 0 0 24 3 1 1 0 1 0 0 0 0 622 0 0 0 8160 240828 0 0 0 0
- 24 2 842 1383 473 368 1G 175M 1G 683M 193M 1G ssslkjjebbk 0 0 168 6 1 1 0 1 0 0 0 0 622 0 0 0 8160 240828 0 0 0 0
- 27 3 844 1099 478 365 1G 175M 1G 683M 193M 1G nsslkjjebbk 0 0 0 0 1 6 1 9 0 0 0 0 622 0 0 0 8160 240828 0 0 0 0
- 26 5 823 1238 396 428 1G 175M 1G 683M 193M 1G ssslkjjebbk 0 0 0 0 2 11 3 9 0 0 0 0 622 0 0 0 8160 240828 0 0 0 0
- 15 1 753 1276 361 391 1G 175M 1G 683M 193M 1G ssslkjjebbk 0 0 40 3 1 2 0 3 0 0 0 0 623 0 0 0 8160 240829 0 0 0 0
但是,你如何借助該實用工具監(jiān)測處理器的使用情況?“-s”選項可用于控制收集或回放哪些子系統(tǒng)數(shù)據(jù)。
比如說,下面這個命令可用于監(jiān)測處理器使用情況的摘要。
- # collectl -sc
- waiting for 1 second sample...
- #
- #cpu sys inter ctxsw
- 15 2 749 1155
- 16 3 772 1445
- 14 2 793 1247
- 27 4 887 1292
- 24 1 796 1258
- 16 1 743 1113
- 15 1 743 1179
- 14 1 706 1078
- 15 1 764 1268
如果你結(jié)合命令和“scdn”,會出現(xiàn)什么情況?想學(xué)習(xí)如何使用命令行工具,***的辦法就是盡可能實際運用一下,所以在你的終端中運行下面這個命令,看看會出現(xiàn)什么情況。
- # collectl -scdn
- waiting for 1 second sample...
- #
- #cpu sys inter ctxsw KBRead Reads KBWrit Writes KBIn PktIn KBOut PktOut
- 25 4 943 3333 0 0 0 0 1 1 0 2
- 27 3 825 2910 0 0 0 0 1 1 0 1
- 27 5 886 2531 0 0 0 0 0 0 0 1
- 20 4 872 2406 0 0 0 0 1 1 0 1
- 26 1 854 2091 0 0 20 2 1 1 0 1
- 39 4 1004 3398 0 0 0 0 2 8 3 6
- 41 6 955 2464 0 0 40 3 1 2 0 3
- 25 7 890 1609 0 0 0 0 1 1 0 1
- 16 2 814 1165 0 0 796 43 2 2 0 2
- 14 1 779 1383 0 0 48 6 1 1 0 1
- 11 2 795 1285 0 0 0 0 2 14 1 14
你很容易明白:默認(rèn)選項是“cdn”,它代表處理器、磁盤和網(wǎng)絡(luò)數(shù)據(jù)。命令的結(jié)果與“collectl -scn”的輸出結(jié)果一樣。
如果你想收集關(guān)于內(nèi)存的數(shù)據(jù),使用下面這個命令。
- # collectl -sm
- waiting for 1 second sample...
- #
- #Free Buff Cach Inac Slab Map
- 1G 177M 1G 684M 193M 1G
- 1G 177M 1G 684M 193M 1G
- 1G 177M 1G 684M 193M 1G
- 1G 177M 1G 684M 193M 1G
- 1G 177M 1G 684M 193M 1G
- 1G 177M 1G 684M 193M 1G
- 1G 177M 1G 684M 193M 1G
- 1G 177M 1G 684M 193M 1G
如果你想獲得關(guān)于內(nèi)存使用情況、閑置內(nèi)存以及對系統(tǒng)性能而言很重要的其他方面的一些詳細(xì)信息,上述輸出結(jié)果非常有用。
想獲得關(guān)于tcp的一些數(shù)據(jù)?使用下面這個命令即可實現(xiàn)。
- # collectl -st
- waiting for 1 second sample...
- #
- # IP Tcp Udp Icmp
- 0 0 0 0
- 0 0 0 0
- 0 0 0 0
- 0 0 0 0
- 0 0 0 0
- 0 0 0 0
- 0 0 0 0
- 0 0 0 0
- 0 0 0 0
- 0 0 0 0
- 0 0 0 0
你有了一定的經(jīng)驗后,就很容易結(jié)合諸多選項,獲得所需要的結(jié)果。比如說,你可以結(jié)合代表tcp的“t”和代表處理器的“c”。下面這個命令就實現(xiàn)了這項功能。
- # collectl -stc
- waiting for 1 second sample...
- #
- #cpu sys inter ctxsw IP Tcp Udp Icmp
- 23 8 961 3136 0 0 0 0
- 24 5 916 3662 0 0 0 0
- 21 8 848 2408 0 0 0 0
- 30 10 916 2674 0 0 0 0
- 38 3 826 1752 0 0 0 0
- 31 3 820 1408 0 0 0 0
- 15 5 781 1335 0 0 0 0
- 17 3 802 1314 0 0 0 0
- 17 3 755 1218 0 0 0 0
- 14 2 788 1321 0 0 0 0
我們?nèi)祟惡茈y記住所有的可用選項,于是我列出了該工具支持的子系統(tǒng)摘要列表。
◦b – 伙伴系統(tǒng)信息(內(nèi)存片段)
◦c – 處理器
◦d – 磁盤
◦f – NFS V3數(shù)據(jù)
◦i – 索引節(jié)點和文件系統(tǒng)
◦j – 中斷
◦l – Lustre
◦m – 內(nèi)存
◦n – 網(wǎng)絡(luò)
◦s – 套接字
◦t – TCP
◦x – 互連
◦y – slabs(系統(tǒng)對象緩存)
對Linux用戶的系統(tǒng)管理員來說,一個非常重要的數(shù)據(jù)就是磁盤使用情況方面所收集的數(shù)據(jù)。下面這個命令將幫助你監(jiān)測磁盤的使用情況。
- # collectl -sd
- waiting for 1 second sample...
- #
- #KBRead Reads KBWrit Writes
- 0 0 0 0
- 0 0 0 0
- 0 0 92 7
- 0 0 0 0
- 0 0 36 3
- 0 0 0 0
- 0 0 0 0
- 0 0 100 7
- 0 0 0 0
你還可以使用“-sD”選項,收集關(guān)于單個磁盤的數(shù)據(jù),但是你要知道關(guān)于全部磁盤的數(shù)據(jù)不會報告。
- # collectl -sD
- waiting for 1 second sample...
- # DISK STATISTICS (/sec)
- # Pct
- #Name KBytes Merged IOs Size Kbytes Merged IOs Size RWSize QLen Wait SvcTim Util
- sda 0 0 0 0 52 11 2 26 26 1 8 8 1
- sda 0 0 0 0 0 0 0 0 0 0 0 0 0
- sda 0 0 0 0 24 0 2 12 12 0 0 0 0
- sda 0 0 0 0 152 0 4 38 38 0 0 0 0
- sda 0 0 0 0 192 45 3 64 64 1 20 20 5
- sda 0 0 0 0 204 0 2 102 102 0 0 0 0
- sda 0 0 0 0 0 0 0 0 0 0 0 0 0
- sda 0 0 0 0 116 26 3 39 38 1 16 16 4
- sda 0 0 0 0 0 0 0 0 0 0 0 0 0
- sda 0 0 0 0 0 0 0 0 0 0 0 0 0
- sda 0 0 0 0 32 5 3 11 10 1 16 16 4
- sda 0 0 0 0 0 0 0 0 0 0 0 0 0
你還可以使用其他的具體子系統(tǒng)來收集詳細(xì)數(shù)據(jù)。下面列出了各個具體子系統(tǒng)。
◦C – 處理器
◦D – 磁盤
◦E – 環(huán)境數(shù)據(jù)(風(fēng)扇、電源和溫度),通過ipmitool
◦F – NFS數(shù)據(jù)
◦J – 中斷
◦L – Lustre OST的細(xì)節(jié),或者客戶端文件系統(tǒng)的細(xì)節(jié)
◦N – 網(wǎng)絡(luò)
◦T – 只有plot格式才有的65個TCP計數(shù)器
◦X – 互連
◦Y – Slabs(系統(tǒng)對象緩存)
◦Z – 進(jìn)程
collectl實用工具有許多可用選項,而僅僅一篇文章沒有足夠的時間和篇幅來逐一細(xì)述。不過,有必要了解如何將該實用工具作為top和ps來使用。
很容易讓collectl作為top實用工具來使用,只要在你的終端中運行下面這個命令,你會看到top工具在Linux系統(tǒng)中執(zhí)行時提供的類似輸出結(jié)果。
- # collectl --top
- # TOP PROCESSES sorted by time (counters are /sec) 13:11:02
- # PID User PR PPID THRD S VSZ RSS CP SysT UsrT Pct AccuTime RKB WKB MajF MinF Command
- ^COuch!tecmint 20 1 40 R 1G 626M 0 0.01 0.14 15 28:48.24 0 0 0 109 /usr/lib/firefox/firefox
- 3403 tecmint 20 1 40 R 1G 626M 1 0.00 0.20 20 28:48.44 0 0 0 600 /usr/lib/firefox/firefox
- 5851 tecmint 20 4666 0 R 17M 13M 0 0.02 0.06 8 00:01.28 0 0 0 0 /usr/bin/perl
- 1682 root 20 1666 2 R 211M 55M 1 0.02 0.01 3 03:10.24 0 0 0 95 /usr/bin/X
- 3454 tecmint 20 3403 8 S 216M 45M 1 0.01 0.02 3 01:23.32 0 0 0 0 /usr/lib/firefox/plugin-container
- 4658 tecmint 20 4657 3 S 207M 17M 1 0.00 0.02 2 00:08.23 0 0 0 142 gnome-terminal
- 2890 tecmint 20 2571 3 S 340M 68M 0 0.00 0.01 1 01:19.95 0 0 0 0 compiz
- 3521 tecmint 20 1 24 S 710M 148M 1 0.01 0.00 1 01:47.84 0 0 0 0 skype
- 1 root 20 0 0 S 3M 2M 0 0.00 0.00 0 00:02.57 0 0 0 0 /sbin/init
- 2 root 20 0 0 S 0 0 1 0.00 0.00 0 00:00.00 0 0 0 0 kthreadd
- 3 root 20 2 0 S 0 0 0 0.00 0.00 0 00:00.60 0 0 0 0 ksoftirqd/0
- 5 root 0 2 0 S 0 0 0 0.00 0.00 0 00:00.00 0 0 0 0 kworker/0:0H
- 7 root 0 2 0 S 0 0 0 0.00 0.00 0 00:00.00 0 0 0 0 kworker/u:0H
- 8 root RT 2 0 S 0 0 0 0.00 0.00 0 00:04.42 0 0 0 0 migration/0
- 9 root 20 2 0 S 0 0 0 0.00 0.00 0 00:00.00 0 0 0 0 rcu_bh
- 10 root 20 2 0 R 0 0 0 0.00 0.00 0 00:02.22 0 0 0 0 rcu_sched
- 11 root RT 2 0 S 0 0 0 0.00 0.00 0 00:00.05 0 0 0 0 watchdog/0
- 12 root RT 2 0 S 0 0 1 0.00 0.00 0 00:00.07 0 0 0 0 watchdog/1
- 13 root 20 2 0 S 0 0 1 0.00 0.00 0 00:00.73 0 0 0 0 ksoftirqd/1
- 14 root RT 2 0 S 0 0 1 0.00 0.00 0 00:01.96 0 0 0 0 migration/1
- 16 root 0 2 0 S 0 0 1 0.00 0.00 0 00:00.00 0 0 0 0 kworker/1:0H
- 17 root 0 2 0 S 0 0 1 0.00 0.00 0 00:00.00 0 0 0 0 cpuset
現(xiàn)在***但并非最不重要的是,想把collectl實用工具用作ps工具,在你的終端中運行下面這個命令。你會獲得關(guān)于系統(tǒng)中進(jìn)程的信息,就跟你在終端中運行“ps”命令所得到的輸出一樣。
- # collectl -c1 -sZ -i:1
- waiting for 1 second sample...
- ### RECORD 1 >>> tecmint-vgn-z13gn <<< (1397979716.001) (Sun Apr 20 13:11:56 2014) ###
- # PROCESS SUMMARY (counters are /sec)
- # PID User PR PPID THRD S VSZ RSS CP SysT UsrT Pct AccuTime RKB WKB MajF MinF Command
- 1 root 20 0 0 S 3M 2M 0 0.00 0.00 0 00:02.57 0 0 0 0 /sbin/init
- 2 root 20 0 0 S 0 0 1 0.00 0.00 0 00:00.00 0 0 0 0 kthreadd
- 3 root 20 2 0 S 0 0 0 0.00 0.00 0 00:00.60 0 0 0 0 ksoftirqd/0
- 5 root 0 2 0 S 0 0 0 0.00 0.00 0 00:00.00 0 0 0 0 kworker/0:0H
- 7 root 0 2 0 S 0 0 0 0.00 0.00 0 00:00.00 0 0 0 0 kworker/u:0H
- 8 root RT 2 0 S 0 0 0 0.00 0.00 0 00:04.42 0 0 0 0 migration/0
- 9 root 20 2 0 S 0 0 0 0.00 0.00 0 00:00.00 0 0 0 0 rcu_bh
- 10 root 20 2 0 S 0 0 0 0.00 0.00 0 00:02.24 0 0 0 0 rcu_sched
- 11 root RT 2 0 S 0 0 0 0.00 0.00 0 00:00.05 0 0 0 0 watchdog/0
- 12 root RT 2 0 S 0 0 1 0.00 0.00 0 00:00.07 0 0 0 0 watchdog/1
- 13 root 20 2 0 S 0 0 1 0.00 0.00 0 00:00.73 0 0 0 0 ksoftirqd/1
- 14 root RT 2 0 S 0 0 1 0.00 0.00 0 00:01.96 0 0 0 0 migration/1
- 16 root 0 2 0 S 0 0 1 0.00 0.00 0 00:00.00 0 0 0 0 kworker/1:0H
- 17 root 0 2 0 S 0 0 1 0.00 0.00 0 00:00.00 0 0 0 0 cpuset
- 18 root 0 2 0 S 0 0 1 0.00 0.00 0 00:00.00 0 0 0 0 khelper
- 19 root 20 2 0 S 0 0 0 0.00 0.00 0 00:00.00 0 0 0 0 kdevtmpfs
- 20 root 0 2 0 S 0 0 0 0.00 0.00 0 00:00.00 0 0 0 0 netns
- 21 root 20 2 0 S 0 0 0 0.00 0.00 0 00:00.00 0 0 0 0 bdi-default
- 22 root 0 2 0 S 0 0 0 0.00 0.00 0 00:00.00 0 0 0 0 kintegrityd
我非常確信,許多Linux系統(tǒng)管理員會喜歡這款工具,如果最充分地使用它,就會領(lǐng)略其強(qiáng)大的功能。如果你想進(jìn)一步了解collectl,可以參閱參考手冊頁,并且不斷實際運用一下。
只要在終端中鍵入下面這個命令,就可以開始閱讀參考手冊頁了。
- # man collectl
參考鏈接
collectl的主頁:http://collectl.sourceforge.net/index.html
英文鏈接: http://www.tecmint.com/linux-performance-monitoring-with-collectl-tool/