1. 程式人生 > 其它 >dstat Linux下的效能監測工具

dstat Linux下的效能監測工具

概述
  先獻上【官網】和【github】本文中所有資料的均源於此,寫的不清楚的地方可以翻閱一下官方文件

  dstat 是一個可以取代vmstat,iostat,netstat和ifstat這些命令的多功能產品。dstat揚長避短,即克服了這些命令的侷限又增加了一些額外的功能,不但擁有更多的監控項,也更靈活。dstat在效能測試、基準測試和排除故障過程中可以很方便監控系統執行狀況。
  dstat可以檢視所有的實時系統資源,如:通過統計IDE控制器當前狀態來比較磁碟利用率,或者直接通過網路頻寬數值來比較磁碟的吞吐率(在相同的時間間隔內)。
  dstat以列表的形式提供選項資訊,並清晰地告知以何種幅度和單位顯示輸出。輸出資訊整潔,降低發生錯誤的概率。最重要的是,整潔的資料更容易編寫外掛用來收集分析關注的資料資訊。
  dstat預設輸出是專門為實時檢視而設計的,然而也可以將詳細資訊通過cvs輸出到一個檔案,然後將cvs檔案匯入到Gnumeric或者Excel中生成圖表。

特性
結合了vmstat,iostat,ifstat,netstat以及更多的資訊
實時顯示統計情況,輸出報告
在分析和排障時可以通過啟用監控項並排序
模組化設計
使用python編寫的,方便擴充套件現有的工作任務
容易擴充套件和新增你的計數器
包含的許多擴充套件外掛——增加新的監控專案很方便
可以分組統計塊裝置/網路裝置,並給出總數
可以顯示每臺裝置的當前狀態
極準確的時間精度,即便是系統負荷較高也不會延遲顯示
顯示準確地單位和和限制轉換誤差範圍
不同的計量單位用不同的顏色顯示
顯示中間結果延時小於1秒
支援輸出CSV格式報表,並能匯入到Gnumeric和Excel以生成圖形
啟程
安裝
只演示CentOS下的安裝(我的實驗環境為CentOS)

[root@wmstianjin16172 ~]# yum install dstat

測試命令

安裝完成測試一下命令是否完成安裝

[root@wmstianjin16172 ~]# dstat

針對預設輸出欄位解釋如下

分組 分組含義及子項欄位含義
CPU狀態 CPU的使用率。顯示了使用者佔比,系統佔比、空閒佔比、等待佔比、硬中斷和軟中斷情況。
磁碟統計 磁碟的讀寫,分別顯示磁碟的讀、寫總數。
網路統計 網路裝置傳送和接受的資料,分別顯示的網路收、發資料總數。
分頁統計 系統的分頁活動。分別顯示換入(in)和換出(out)。
系統統計 統計中斷(int)和上下文切換(csw)。
命令格式
dstat [-afv] [options..] [delay [count]]
1
命令選項
Options Details
-c, - -cpu 開啟cpu統計
-C 該選項跟cpu的編號(0~cpu核數-1,多個用都好隔開)如:0,3,total表示分別包含cpu0、cpu3和total
-d, - -disk 開啟disk統計
-D 改選跟具體的裝置名(多個用逗號隔開)如:total,hda,hdb表示分別統計total、hda、hdb裝置塊
-g, - -page 開啟分頁統計
-i, - -int 開啟中斷統計
-I 5,10 沒弄懂呢~巴拉巴拉
-l, - -load 開啟負載均衡統計,分別是1m,5m,15m
-m, - -mem 開啟記憶體統計,包括used,buffers,cache,free
-n, - -net 開啟net統計,包括接受和傳送
-N 該選項可以跟網路裝置名多個用逗號隔開,如eth1,total
-p, - -proc 開啟程序統計,包括runnable, uninterruptible, new
-r, - -io io開啟請求統計,包括read requests, write requests
-s, - -swap 開啟swap統計,包括used, free
-S 該選項可以跟具體的交換區,多個用逗號隔開如swap1,total
-t, - -time 啟用時間和日期輸出
-T, - -epoch 啟用時間計數,從epoch到現在的秒數
-y, - -sys 開啟系統統計,包括中斷和上下文切換
- -aio 開啟同步IO統計 (asynchronous I/O)
- -fs 開啟檔案系統統計,包括 (open files, inodes)
- -ipc 開啟ipc統計,包括 (message queue, semaphores, shared memory)
- -lock 開啟檔案所統計,包括 (posix, flock, read, write)
- -raw 開啟raw統計 (raw sockets)
- -socket 開啟sockets統計,包括 (total, tcp, udp, raw, ip-fragments)
- -tcp 開啟tcp統計,包括(listen, established, syn, time_wait, close)
- -udp 開啟udp統計 (listen, active)
- -unix 開啟unix統計(datagram, stream, listen, active)
- -vm 開啟vm統計 (hard pagefaults, soft pagefaults, allocated, free)
- -stat 通過外掛名稱開啟外掛擴充套件,詳見命令外掛 :可能的內建外掛為aio, cpu, cpu24, disk, disk24, disk24old, epoch, fs, int, int24, io, ipc, load, lock, mem, net, page, page24, proc, raw, socket, swap, swapold, sys, tcp, time,udp, unix, vm
- -list 列舉內建外掛擴充套件的名稱
-a, - -all 是預設值相當於 -cdngy (default)
-f, - -full 相當於 -C, -D, -I, -N and -S
-v, - -vmstat 相當於 -pmgdsc -D total
- -bw, - -blackonwhite 在白色背景終端上改變顯示顏色
- -float 在螢幕上的輸出強制顯示為浮點值(即帶小數)(相反的選項設定為 - -integer)
- -integer 在螢幕上的輸出強制顯示為整數值,此為預設值(相反的選項設定為- -float)
- -nocolor 禁用顏色(意味著選項 - -noupdate)
- -noheaders 禁止重複輸出header,預設會列印一螢幕輸出一次header
- -noupdate 當delay>1時禁止在過程中更新(即在時間間隔內不允許更新)
- -output file 輸出結果到cvs檔案中
命令引數
引數名稱 引數描述
delay 兩次輸出之間的時間間隔,預設是1s
count 報告輸出的次數,預設是沒有限制,一直輸出知道ctrl+c
命令外掛
雖然anyone可以自由的為dstat編寫外掛,但dstat附帶大量的外掛已經大大擴充套件其功能,下面是dstat附帶外掛的一個概述:

外掛名稱 外掛描述
- -battery 電池電池百分比(需要ACPI)
- -battery-remain 電池剩餘小時、分鐘(需要ACPI)
- -cpufreq CPU頻率百分比(需要ACPI)
- -dbus dbus連線的數量(需要python-dbus)
- -disk-util 顯示某一時間磁碟的忙碌狀況
- -fan 風扇轉速(需要ACPI)
- -freespace 每個檔案系統的磁碟使用情況
- -gpfs gpfs讀/寫 I / O(需要mmpmon)
- -gpfs-ops GPFS檔案系統操作(需要mmpmon)
- -helloworld dstat外掛Hello world示例
- -innodb-buffer 顯示innodb緩衝區統計
- -innodb-io 顯示innodb I / O統計資料
- -innodb-ops 顯示innodb操作計數器
- -lustre 顯示lustreI / O吞吐量
- -memcache-hits 顯示memcache 的命中和未命中的數量
- -mysql5-cmds 顯示MySQL5命令統計
- -mysql5-conn 顯示MySQL5連線統計
- -mysql5-io MySQL5 I / O統計資料
- -mysql5-keys 顯示MySQL5關鍵字統計
- -mysql-io 顯示MySQL I / O統計資料
- -mysql-keys 顯示MySQL關鍵字統計
- -net-packets 顯示接收和傳送的資料包的數量
- -nfs3 顯示NFS v3客戶端操作
- -nfs3-ops 顯示擴充套件NFS v3客戶端操作
- -nfsd3 顯示NFS v3伺服器操作
- -nfsd3-ops 顯示擴充套件NFS v3伺服器操作
- -ntp 顯示NTP伺服器的ntp時間
- -postfix 顯示字尾佇列大小(需要字尾)
- -power 顯示電源使用量
- -proc-count 顯示處理器的總數
- -rpc 顯示rpc客戶端呼叫統計
- -rpcd 顯示RPC伺服器呼叫統計
- -sendmail 顯示sendmail佇列大小(需要sendmail)
- -snooze 顯示每秒運算次數
- -test 顯示外掛輸出
- -thermal 熱系統的溫度感測器
- -top-bio 顯示消耗塊I/O最大的程序
- -top-cpu 顯示消耗CPU最大的程序
- -top-cputime 顯示使用CPU時間最大的程序(單位ms)
- -top-cputime-avg 顯示使用CPU時間平均最大的程序(單位ms)
- -top-io 顯示消耗I/O最大程序
- -top-latency 顯示總延遲最大的程序(單位ms)
- -top-latency-avg 顯示平均延時最大的程序(單位ms)
- -top-mem 顯示使用記憶體最大的程序
- -top-oom 顯示第一個被OOM結束的程序
- -utmp 顯示utmp連線的數量(需要python-utmp)
- -vmk-hba 顯示VMware ESX核心vmhba統計數
- -vmk-int 顯示VMware ESX核心中斷資料
- -vmk-nic 顯示VMware ESX核心埠統計
- -vz-io 顯示每個OpenVZ請求CPU使用率
- -vz-ubc 顯示OpenVZ使用者統計
- -wifi 無線連線質量和訊號噪聲比
常用外掛
外掛名稱 外掛描述
- -disk-util 顯示某一時間磁碟的忙碌狀況
- -freespace 顯示當前磁碟空間使用率
- -proc-count 顯示正在執行的程式數量
- -top-bio 顯示塊I/O最大的程序
- -top-cpu 顯示CPU佔用最大的程序
- -top-io 顯示正常I/O最大的程序
- -top-mem 顯示佔用最多記憶體的程序
舉一些例子:

記憶體資源使用情況:

dstat -glms --top-mem

CPU資源使用情況:

dstat -cyl --proc-count --top-cpu

輸出一個csv檔案:

dstat --output ~/test.csv

常見問題
1、cpu分組中”wait”,如果一直處於高使用率,那說明系統存在一些其它問題。當CPU的狀態處在”waits”時,那是因為它正在等待I/O裝置(例如記憶體,磁碟或者網路)的響應而且還沒有收到。
2、CPU的使用情況是否正常:使用者態和核心態的使用是否合理;總體佔比是否合理;若不合理可以用dstat對應的外掛(- -top-cpu)排查最耗CPU的程序,配合mpstat、top再去下鑽一下分析執行緒,進一步到程式(比如java可以jstack)。
3、磁碟IO讀寫是否正常:讀寫是否偏大;若不正常可以配合外掛- -disk-util、- -freespace、- -top-bio、- -top-io等進行排查,也可以配合iostat排查
3、記憶體是否正常:一般要配合交換區記憶體一起判斷,若不正常可以配合外掛- -top-mem,可能是開啟的程序太多,或者第三方程式搗亂。
4、應用程式記憶體是否正常:配合業務表現比如請求響應慢、沒反應等,在結合第三方程式監控(如java可以用jvm監控工具(jprofiler、jconsole、jvisualvm……)監控記憶體)此種情況和3還不太一樣,一個jvm記憶體一個sys記憶體
5、分頁指的是一種記憶體管理技術用於查詢系統場景,一個較大的分頁表明系統正在使用大量的交換空間,或者說記憶體非常分散,大多數情況下你都希望看到page in(換入)和page out(換出)的值都是0。
6、系統統計僅在有比較基線時才有意義。中斷和上下文切換較高的統計值通常表示大量的程序造成擁塞,需要對CPU進行關注。伺服器一般情況下都會執行執行一些程式,所以這項總是顯示一些數值。
7、使用不同的外掛可以快速排查有問題的程序然後配合其他工具下鑽具體問題,當然這個需要建立在你對所有的外掛都比較熟悉的基礎之上,知道什麼情況下使用什麼外掛。技巧:可以將常用的命令寫成指令碼,執行分析,這樣就不用每次都敲了。