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