1. 程式人生 > >全能系統監控工具dstat

全能系統監控工具dstat

最近公司組織了培訓,看到老哥講了系統性能優化一節,使用了“dstat -lcdngy”命令進行系統監控檢視,感覺很好用,之前一直用個top vmstat等,看到這個工具後感覺必須馬上學習一下,下面這個是我找到的一個比較好的內容。

一、什麼是dstat?

通過man幫助,可以看到官方對dstat的定義為:多功能系統資源統計生成工具( versatile tool for generating system resource statistics)。在獲取的資訊上有點類似於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.);其結果可以保持到csv檔案,使用指令碼或第三方工具對效能進行分析利用(如通過監控平臺監控,也可以保持到資料庫)。在Centos 6.x系統上安裝基本伺服器即預設安裝,而在其他作業系統可能需要手動安裝。

二、dstat的基本使用:

2.1 dstat的預設選項

與許多命令一樣,dstat命令有預設選項,執行dstat命令不加任何引數,它預設會收集-cpu-、-disk-、-net-、-paging-、-system-的資料,一秒鐘收集一次。 預設輸入 dstat 等於輸入了dstat -cdngy 1或dstat -a 1。

2.2 dstat的常用選項:

dstat的用法如下:

dstat [-afv] [options..] [delay [count]]

 

使用 dstat -h檢視全部選項,這裡不逐一列舉,下面簡單介紹下常用選項

常用選項如下:

# 直接跟數字,表示#秒收集一次資料,預設為一秒;dstat 5表示5秒更新一次

-c,--cpu   統計CPU狀態,包括 user, system, idle(空閒等待時間百分比), wait(等待磁碟IO), hardware interrupt(硬體中斷), software interrupt(軟體中斷)等;

-d, --disk 統計磁碟讀寫狀態

-D total,sda 統計指定磁碟或彙總資訊

-l, --load 統計系統負載情況,包括1分鐘、5分鐘、15分鐘平均值

-m, --mem 統計系統實體記憶體使用情況,包括used, buffers, cache, free

-s, --swap 統計swap已使用和剩餘量

-n, --net 統計網路使用情況,包括接收和傳送資料

-N eth1,total  統計eth1介面彙總流量

-r, --io 統計I/O請求,包括讀寫請求

-p, --proc 統計程序資訊,包括runnable、uninterruptible、new

-y, --sys 統計系統資訊,包括中斷、上下文切換

-t 顯示統計時時間,對分析歷史資料非常有用

--fs 統計檔案開啟數和inodes數

以上這些就是最常用的選項,而一般都組合使用,個人比較常用的是:

  • dstat -cmsdnl -D sda9 -N lo,etho 100 5

三、監測介面各引數含義(部分)

 

Procs

  • r:執行的和等待(CPU時間片)執行的程序數,這個值也可以判斷是否需要增加CPU(長期大於1) 
  • b:處於不可中斷狀態的程序數,常見的情況是由IO引起的

Memory

  • swpd: 切換到交換記憶體上的記憶體(預設以KB為單位)。如果 swpd 的值不為0,或者還比較大,比如超過100M了,但是 si, so 的值長期為 0,這種情況我們可以不用擔心,不會影響系統性能。
  • free: 空閒的實體記憶體
  • buff: 作為buffer cache的記憶體,對塊裝置的讀寫進行緩衝
  • cache: 作為page cache的記憶體, 檔案系統的cache。如果 cache 的值大的時候,說明cache住的檔案數多,如果頻繁訪問到的檔案都能被cache住,那麼磁碟的讀IO bi 會非常小。

Swap

  • si: 交換記憶體使用,由磁碟調入記憶體
  • so: 交換記憶體使用,由記憶體調入磁碟

記憶體夠用的時候,這2個值都是0,如果這2個值長期大於0時,系統性能會受到影響。磁碟IO和CPU資源都會被消耗。

我發現有些朋友看到空閒記憶體(free)很少或接近於0時,就認為記憶體不夠用了,實際上不能光看這一點的,還要結合si,so,如果free很少,但是si,so也很少(大多時候是0),那麼不用擔心,系統性能這時不會受到影響的。

磁碟IO

  • bi: 從塊裝置讀入的資料總量(讀磁碟) (KB/s)
  • bo: 寫入到塊裝置的資料總理(寫磁碟) (KB/s)

注:隨機磁碟讀寫的時候,這2個 值越大(如超出1M),能看到CPU在IO等待的值也會越大

System

  • in: 每秒產生的中斷次數
  • cs: 每秒產生的上下文切換次數

上面這2個值越大,會看到由核心消耗的CPU時間會越多

Cpu

  • usr: 使用者程序消耗的CPU時間百分比

us 的值比較高時,說明使用者程序消耗的CPU時間多,但是如果長期超過50% 的使用,那麼我們就該考慮優化程式演算法或者進行加速了(比如 PHP/Perl)

  • sys: 核心程序消耗的CPU時間百分比 

sys 的值高時,說明系統核心消耗的CPU資源多,這並不是良性的表現,我們應該檢查原因。

  • wai: IO等待消耗的CPU時間百分比

wa 的值高時,說明IO等待比較嚴重,這可能是由於磁碟大量作隨機訪問造成,也有可能是磁碟的頻寬出現瓶頸(塊操作)。

  • idl: CPU處在空閒狀態時間百分比

四、dstat的高階用法

dstat的功能非常強大,除了上述常用用法外,還有一些大家不常用的高階用法,如下:

3.1 找出佔用資源最高的程序和使用者

--top-(io|bio|cpu|cputime|cputime-avg|mem) 通過這幾個選項,可以看到具體是那個使用者那個程序佔用了相關係統資源,對系統調優非常有效。如檢視當前佔用I/O、cpu、記憶體等最高的程序資訊可以使用dstat --top-mem --top-io --top-cpu:

圖片

3.2 獲取其他應用資訊:

dstat除了可以獲取系統關鍵資訊外,還可以獲取其他應用資訊,如通過下列選項,可以獲取到其他一些常用應用資訊:

--postfix 顯示postfix佇列大小

--sendmail 顯示sendmail佇列大小

--ntp 顯示ntp伺服器時間

--nfs3 獲取nfs客戶端資訊

--nfsd3 獲取nfs伺服器資訊,不過nfs伺服器版本需為第三版才可以,該選項還有更多用法,可以參考man幫助獲取

--mysql5-(cmds|conn|io|keys ) 獲取mysql5相關資訊

 

原文地址:https://www.cnblogs.com/vincent-hv/p/3358194.html