第一篇講了一些最基礎(chǔ)的命令了,接下來在研究研究高級的命令:
sar
netstat
pidstat
strace
tcpdump
blktrace
iotop
slabtop
sysctl
/proc
sar
sar 是 System Activity Reporter 的意思,這是一個強大到發(fā)指的工具,在第一篇中提到的那些工具的功能(cpu、 mem、 disk、 net),基本上 sar 都可以覆蓋到,不信的話可以試一下 sar -A 1 1 看一下它都統(tǒng)計了哪些東西。此外 sar 可以周期性的執(zhí)行統(tǒng)計,很多系統(tǒng)級別的監(jiān)控都是通過 sar 來做的。淘寶還專門自己開發(fā)了一個tsar在原有的系統(tǒng)級別的監(jiān)控上增加了對應(yīng)用的監(jiān)控。
netstat
這個命令也是和網(wǎng)絡(luò)相關(guān)的,可以查看 socket 的連接信息,比如建立了哪些 TCP 連接,他們的狀態(tài)是怎樣的,一個進程有多少鏈接。通常這個命令后面都會跟著 grep 或者 awk 的命令進行進一步處理。以至于有的 awk 的教程都會以 netstat 的輸出處理作為樣例,比如耗子叔叔的awk 簡明教程。此外這個命令還有一個 -s 的參數(shù)可以統(tǒng)計不同的協(xié)議的數(shù)據(jù)包信息。
pidstat
其實要不是看到大神說有這個命令,我還以為這個命令是 ps 的全稱。其實展示的東西也和 ps 類似,主要的區(qū)別在于 ps 只是一次提供系統(tǒng)進程狀態(tài)的一個快照,pidstat# 可以指定進程提供定時多次的統(tǒng)計信息,相當于你可以更細粒度的 ps 了。這也是做監(jiān)控的一個很好的工具,可以針對特殊進程特殊關(guān)照。
strace
其實感覺 strace 是一個更偏針對應(yīng)用的性能工具,他可以統(tǒng)計出進程進行了哪些系統(tǒng)調(diào)用,處理了哪些信號。也因此 strace 是一個分析程序?qū)崿F(xiàn)的一個很好的工具,比如說你想知道 pidstat 中的信息都是從哪里獲得的就 strace pidstat |& grep open 就可以知道它是打開了哪些文件獲取到信息的。由于 strace 會將輸出打到標準錯誤中所以管道處理要記得加上 & 。這個命令是很強大,但問題是也及其消耗性能,一般情況下慢一個數(shù)量級還是會有的,所以只是分析的時候用一下,正常執(zhí)行就不要了。
tcpdump
大名鼎鼎的 tcpdump 可以將經(jīng)過網(wǎng)卡的數(shù)據(jù)包保存下來一份以供 wireshark 這類軟件進一步進行分析。如果愿意的話開啟網(wǎng)卡混雜模式也可以捕獲同一網(wǎng)絡(luò)上其他機器的數(shù)據(jù)包,也是黑客很喜歡的工具。和 strace 類似, tcpdump 的功能很強大,即使開了 filter 功能也很消耗性能,一般的生產(chǎn)機如果流量大的話開啟 tcpdump還是吃不消的。當然有一些神秘的組織是需要獲取網(wǎng)絡(luò)包的完整備份的,他們大概是用專門的硬件完成的吧。
blktrace
其實這個命令用 btrace 展示會更好一些,看名字就知道是 strace 的 io 版,可以實時的展示每次磁盤 IO 請求的內(nèi)容,耗時,發(fā)生位置等等很多東西,不過帶 trace 的命令一般都比較耗性能。
iotop
和上個命令類似,一看就是 top 的 io 版,簡潔明了,包括展示都和 top 很類似,試一下就知道是怎么回事了。
slabtop
其實只要知道 slab 是個什么東西,這個命令就很好理解了。slab 是對象緩沖池,將一些常用的小的對象結(jié)構(gòu)再釋放后緩存起來,而不是直接交給系統(tǒng)回收,這樣可以避免頻繁的小對象找系統(tǒng)申請內(nèi)存造成性能下降,知道這個再看 這條命令就很輕松了。
sysctl
這里面是一些很有講究的系統(tǒng)參數(shù)的設(shè)置,很多參數(shù)的設(shè)置都會對服務(wù)器的性能產(chǎn)生很大的影響。這也是個水很深的配置文件,比如 tcpreuse、tcprecycle 這些服務(wù)器的重要配置都在這里面。這里面的配置估計也能講上個幾天幾夜。還是先 sysctl -a 看一下感受感受吧。
/proc
其實上述諸多的工具都是從這個文件加下面讀取文件做展示的,不過真要自己解析這里面的文件還是蠻耗功夫的,所以還是好好用一下上面的那些命令吧。不過如果你對那些命令是如何實現(xiàn)的可以配合著 strace 來探索這里面的奧秘。