最近看了 Brendan Gregg 大神著名的 Linux Performance Observability Tools,這么好的資料不好好學(xué)習(xí)一下實(shí)在是浪費(fèi)了,又找到了大神的ppt 和 演講(需爬墻),于是把相關(guān)的命令和概念連預(yù)習(xí),學(xué)習(xí),復(fù)習(xí)走了一遍。
首先學(xué)習(xí)的是大神提出的 Basic Tool 有如下幾個(gè):
uptime
top (htop)
mpstat
iostat
vmstat
free
ping
nicstat
dstat
uptime
uptime 比較重要的能顯示當(dāng)前系統(tǒng)的負(fù)載狀態(tài),但是這個(gè)負(fù)載究竟是什么意思呢?查了一些資料負(fù)載指的是當(dāng)前可運(yùn)行的程序加上正在運(yùn)行的程序再加上等待 IO 的程序,比如現(xiàn)在運(yùn)行著一個(gè),一個(gè)等待運(yùn)行,還有一個(gè)等待 IO 那么負(fù)載就是3. uptime 后面三個(gè)數(shù)分別是 1min, 5min 和 15min 的負(fù)載平均值,由于內(nèi)核用了一個(gè)指數(shù)平滑的平均算法,這個(gè)值不能直接反應(yīng)當(dāng)前等待的進(jìn)程數(shù)。此外這個(gè)值沒(méi)對(duì)多核進(jìn)行 normalization 所以單核情況下當(dāng)負(fù)載是 1 的時(shí)候說(shuō)明 cpu 滿載了,但是對(duì)于 4 核 cpu 剛到滿負(fù)載的 25%。 一般情況下這個(gè)值越大就說(shuō)明等待 CPU 的進(jìn)程越多,如果大于核數(shù)就說(shuō)明有進(jìn)程在等待 CPU,需要看一下程序的問(wèn)題或者考慮加機(jī)器了。另外即使負(fù)載過(guò)載了也不一定說(shuō)明 CPU 的利用率高,因?yàn)楹芸赡苁谴罅康恼?qǐng)求 IO 的進(jìn)程在等待,像一些數(shù)據(jù)庫(kù)服務(wù),所以看完負(fù)載后還要針對(duì)應(yīng)用場(chǎng)景綜合考量。
top & htop
top 其實(shí)是一個(gè)相當(dāng)全面的分析了還是事實(shí)的,其他很多命令能拿到的數(shù)據(jù),top 一個(gè)命令就可以拿到。但是他的一個(gè)問(wèn)題就是本身的 overhead 比較大,如果系統(tǒng)負(fù)載本身就很大那么可能就會(huì)卡住了。此外 top 可能會(huì)忽視掉那些生命周期很短的程序。top 的 manual 里詳細(xì)介紹了每個(gè)指標(biāo)的意義,翻看一下還是很有收獲的。其中比較要關(guān)注的有 wa(io wait),查看是不是你的 IO 是瓶頸,還有 st (time stolen from this vm by the hypervisor) 這個(gè)指標(biāo)會(huì)出現(xiàn)在虛擬機(jī)里的系統(tǒng)中,表示的是你的虛擬機(jī)在等待真實(shí)物理機(jī)的 CPU 資源的時(shí)間。如果這個(gè)值很高的話說(shuō)明你的服務(wù)提供商的 CPU 資源有限你沒(méi)搶過(guò)別人,很有可能使服務(wù)商超賣(mài)了。碰到這種情況要么打客服投訴,或者多掏點(diǎn)銀子找個(gè)靠譜的運(yùn)營(yíng)商吧。
htop 是 top 的改進(jìn)版,帶著各種顏色表示和百分比進(jìn)度條,以及更豐富的功能,小伙伴們可以嘗試一下。
mpstat
mpstat 可以顯示出每個(gè) CPU 核心的工作情況,其實(shí)也可以在 top 里輸入 1 看到。通過(guò)這個(gè)命令我們可以觀察是不是存在負(fù)載不均的現(xiàn)象,某個(gè)核心跑滿了,另一個(gè)還在閑著,造成整體性能的下降。
iostat
加上 -x 參數(shù)后可以看到幾乎全部的 io 指標(biāo),包括 tps, 請(qǐng)求 queue 的平均長(zhǎng)度,平均處理時(shí)間, 磁盤(pán)帶寬利用率等等。每個(gè)指標(biāo) manual 中都有詳細(xì)的解釋。
vmstat & free
vmstat 是一個(gè)展示內(nèi)存整體使用情況的命令,其中要關(guān)注一下 swpd 和 swap 的 in/out 。如果這一部分的數(shù)值過(guò)大,會(huì)頻繁的 IO 造成性能下降,要么看看是不是程序內(nèi)存泄露了,要么就加內(nèi)存吧。 memory 里的 buffer 指的是寫(xiě)磁盤(pán)緩沖區(qū), 而 cache 可以當(dāng)成是讀文件的緩沖區(qū)。free也是類(lèi)似的功能,不過(guò)只展示內(nèi)存部分的內(nèi)容。
ping
這個(gè)相對(duì)來(lái)說(shuō)簡(jiǎn)單一些,主要反映了主機(jī)間的延遲和連通性,很多時(shí)候也只能告訴我們這些了??梢試L試一下 hping 有著指定端口,高級(jí) tracerout 的功能。
nicstat
一個(gè)和 iostat 類(lèi)似,不過(guò)是針對(duì)網(wǎng)卡的命令。
dstat
一個(gè)綜合了cpu、 memory、 IO、 network 的工具,可以事實(shí)展示當(dāng)前的系統(tǒng)資源利用情況。
以上就是最基礎(chǔ)的命令了,高級(jí)一些的命令有:
sar
netstat
pidstat
strace
tcpdump
blktrace
iotop
slabtop
sysctl
/proc
待研究后再寫(xiě)總結(jié)。