什么是dstat?
官方對dstat的定義為:多功能系統(tǒng)資源統(tǒng)計生成工具(?versatile tool for generating system resource statistics)绍妨。在獲取的信息上有點(diǎn)類似于top、free案腺、iostat虎谢、vmstat等多個工具的合集,官方解釋為vmstat、iostat、ifstat等工具的多功能替代品栅贴,且添加了許多額外的功能(Dstat is a versatile replacement for vmstat, iostat and ifstat. Dstat overcomes some of the limitations and adds some extra features.);其結(jié)果可以保持到csv文件熏迹,使用腳本或第三方工具對性能進(jìn)行分析利用(如通過監(jiān)控平臺監(jiān)控,也可以保持到數(shù)據(jù)庫)凝赛。在Centos 6.x系統(tǒng)上安裝基本服務(wù)器即默認(rèn)安裝注暗,而在其他操作系統(tǒng)可能需要手動安裝。
dstat的基本使用
2.1 dstat的默認(rèn)選項
與許多命令一樣墓猎,dstat命令有默認(rèn)選項捆昏,執(zhí)行dstat命令不加任何參數(shù),它默認(rèn)會收集-cpu-毙沾、-disk-骗卜、-net-、-paging-左胞、-system-的數(shù)據(jù)寇仓,一秒鐘收集一次。?默認(rèn)輸入 dstat 等于輸入了dstat -cdngy 1或dstat -a 1烤宙。
2.2 dstat的常用選項:
dstat的用法如下:
dstat [-afv] [options..] [delay [count]]
使用 dstat -h查看全部選項遍烦,這里不逐一列舉,下面簡單介紹下常用選項
常用選項如下:
# 直接跟數(shù)字躺枕,表示#秒收集一次數(shù)據(jù)服猪,默認(rèn)為一秒;dstat 5表示5秒更新一次
-c,--cpu ? 統(tǒng)計CPU狀態(tài)拐云,包括 user,?system, idle(空閑等待時間百分比), wait(等待磁盤IO), hardware interrupt(硬件中斷), software interrupt(軟件中斷)等罢猪;
-d, --disk 統(tǒng)計磁盤讀寫狀態(tài)
-D total,sda 統(tǒng)計指定磁盤或匯總信息
-l, --load 統(tǒng)計系統(tǒng)負(fù)載情況,包括1分鐘叉瘩、5分鐘膳帕、15分鐘平均值
-m, --mem 統(tǒng)計系統(tǒng)物理內(nèi)存使用情況,包括used, buffers, cache, free
-s, --swap 統(tǒng)計swap已使用和剩余量
-n, --net 統(tǒng)計網(wǎng)絡(luò)使用情況房揭,包括接收和發(fā)送數(shù)據(jù)
-N eth1,total ?統(tǒng)計eth1接口匯總流量
-r, --io 統(tǒng)計I/O請求备闲,包括讀寫請求
-p, --proc 統(tǒng)計進(jìn)程信息晌端,包括runnable、uninterruptible恬砂、new
-y, --sys 統(tǒng)計系統(tǒng)信息咧纠,包括中斷、上下文切換
-t 顯示統(tǒng)計時時間泻骤,對分析歷史數(shù)據(jù)非常有用
--fs 統(tǒng)計文件打開數(shù)和inodes數(shù)
以上這些就是最常用的選項漆羔,而一般都組合使用,個人比較常用的是:
dstat -cmsdnl -D sda9 -N lo,etho 100 5
監(jiān)測界面各參數(shù)含義
Procs
r:運(yùn)行的和等待(CPU時間片)運(yùn)行的進(jìn)程數(shù)狱掂,這個值也可以判斷是否需要增加CPU(長期大于1)?
b:處于不可中斷狀態(tài)的進(jìn)程數(shù)演痒,常見的情況是由IO引起的
Memory
swpd: 切換到交換內(nèi)存上的內(nèi)存(默認(rèn)以KB為單位)。如果 swpd 的值不為0趋惨,或者還比較大鸟顺,比如超過100M了,但是 si, so 的值長期為 0器虾,這種情況我們可以不用擔(dān)心讯嫂,不會影響系統(tǒng)性能。
free: 空閑的物理內(nèi)存
buff: 作為buffer cache的內(nèi)存兆沙,對塊設(shè)備的讀寫進(jìn)行緩沖
cache: 作為page cache的內(nèi)存, 文件系統(tǒng)的cache欧芽。如果 cache 的值大的時候,說明cache住的文件數(shù)多葛圃,如果頻繁訪問到的文件都能被cache住千扔,那么磁盤的讀IO bi 會非常小。
Swap
si: 交換內(nèi)存使用库正,由磁盤調(diào)入內(nèi)存
so: 交換內(nèi)存使用曲楚,由內(nèi)存調(diào)入磁盤
內(nèi)存夠用的時候,這2個值都是0诀诊,如果這2個值長期大于0時洞渤,系統(tǒng)性能會受到影響。磁盤IO和CPU資源都會被消耗属瓣。
我發(fā)現(xiàn)有些朋友看到空閑內(nèi)存(free)很少或接近于0時载迄,就認(rèn)為內(nèi)存不夠用了,實際上不能光看這一點(diǎn)的抡蛙,還要結(jié)合si,so护昧,如果free很少,但是si,so也很少(大多時候是0)粗截,那么不用擔(dān)心惋耙,系統(tǒng)性能這時不會受到影響的。
磁盤IO
bi: 從塊設(shè)備讀入的數(shù)據(jù)總量(讀磁盤) (KB/s)
bo: 寫入到塊設(shè)備的數(shù)據(jù)總理(寫磁盤) (KB/s)
注:隨機(jī)磁盤讀寫的時候,這2個 值越大(如超出1M)绽榛,能看到CPU在IO等待的值也會越大
System
in: 每秒產(chǎn)生的中斷次數(shù)
cs: 每秒產(chǎn)生的上下文切換次數(shù)
上面這2個值越大湿酸,會看到由內(nèi)核消耗的CPU時間會越多
Cpu
usr: 用戶進(jìn)程消耗的CPU時間百分比
us 的值比較高時,說明用戶進(jìn)程消耗的CPU時間多灭美,但是如果長期超過50% 的使用推溃,那么我們就該考慮優(yōu)化程序算法或者進(jìn)行加速了(比如PHP/Perl)
sys: 內(nèi)核進(jìn)程消耗的CPU時間百分比?
sys 的值高時,說明系統(tǒng)內(nèi)核消耗的CPU資源多届腐,這并不是良性的表現(xiàn)铁坎,我們應(yīng)該檢查原因。
wai: IO等待消耗的CPU時間百分比
wa 的值高時犁苏,說明IO等待比較嚴(yán)重硬萍,這可能是由于磁盤大量作隨機(jī)訪問造成,也有可能是磁盤的帶寬出現(xiàn)瓶頸(塊操作)围详。
idl: CPU處在空閑狀態(tài)時間百分比
dstat的高級用法
dstat的功能非常強(qiáng)大朴乖,除了上述常用用法外,還有一些大家不常用的高級用法助赞,如下:
3.1 找出占用資源最高的進(jìn)程和用戶
--top-(io|bio|cpu|cputime|cputime-avg|mem) 通過這幾個選項寒砖,可以看到具體是那個用戶那個進(jìn)程占用了相關(guān)系統(tǒng)資源,對系統(tǒng)調(diào)優(yōu)非常有效嫉拐。如查看當(dāng)前占用I/O、cpu魁兼、內(nèi)存等最高的進(jìn)程信息可以使用dstat --top-mem --top-io --top-cpu:
3.2 獲取其他應(yīng)用信息:
dstat除了可以獲取系統(tǒng)關(guān)鍵信息外婉徘,還可以獲取其他應(yīng)用信息,如通過下列選項咐汞,可以獲取到其他一些常用應(yīng)用信息:
--postfix 顯示postfix隊列大小
--sendmail 顯示sendmail隊列大小
--ntp 顯示ntp服務(wù)器時間
--nfs3 獲取nfs客戶端信息
--nfsd3 獲取nfs服務(wù)器信息盖呼,不過nfs服務(wù)器版本需為第三版才可以,該選項還有更多用法化撕,可以參考man幫助獲取
--mysql5-(cmds|conn|io|keys ) 獲取mysql5相關(guān)信息