dstat 指令是一個用來替換 vmstat、iostat、netstat、nfsstat 和 ifstat 這些指令的工具,通用的系統資源統計工具,是一個全能系統資訊統計工具。與 sysstat 相比,dstat 擁有一個彩色的界面,在觀察性能狀況時,資料比較顯眼容易觀察;而且 dstat 支援即時重新整理,輸入 dstat 3 即每 3 秒收集一次,和 sysstat 相同的是,dstat 也可以收集指定的性能資源,dstat -c 顯示 CPU 的情況。
dstat 指令安裝:
-bash/zsh: dstat: command not found #Debianapt-get install dstat #Ubuntuapt-get install dstat #Alpineapk add dstat #Arch Linuxpacman -S dstat #Kali Linuxapt-get install dstat #CentOSyum install dstat #Fedoradnf install dstat #OS Xbrew install dstat #Raspbianapt-get install dstat
dstat 指令補充說明:
dstat 可以讓你實時地看到所有系統資源,例如,你能夠通過統計 IDE 控制器目前狀态來比較磁盤使用率,或者直接通過網絡帶寬數值來比較磁盤的吞吐率(在相同的時間間隔内)。
dstat 将以清單的形式為你提供選項資訊并清晰地告訴你是在何種幅度和機關顯示輸出。這樣更好地避免了資訊混亂和誤報。
更重要的是,它可以讓你更容易編寫插件來收集你想要的資料資訊,以從未有過的方式進行擴充。
dstat 的預設輸出是專門為人們實時檢視而設計的,不過你也可以将詳細資訊通過 CSV 輸出到一個檔案,并導入到 Gnumeric 或者 Excel 生成表格中。
dstat 指令文法:
dstat [-afv] [options..] [delay [count]]
dstat 指令選項:
-c:顯示CPU系統占用,使用者占用,空閑,等待,中斷,軟體中斷等資訊。-C:當有多個CPU時候,此參數可按需分别顯示cpu狀态,例:-C 0,1 是顯示cpu0和cpu1的資訊。-d:顯示磁盤讀寫資料大小。-D hda,total:include hda and total。-n:顯示網絡狀态。-N eth1,total:有多塊網卡時,指定要顯示的網卡。-l:顯示系統負載情況。-m:顯示記憶體使用情況。-g:顯示頁面使用情況。-p:顯示程序狀态。-s:顯示交換分區使用情況。-S:類似D/N。-r:I/O請求情況。-y:系統狀态。--ipc:顯示ipc消息隊列,信号等資訊。--socket:用來顯示tcp udp端口狀态。-a:此為預設選項,等同于-cdngy。-v:等同于 -pmgdsc -D total。--output 檔案:此選項也比較有用,可以把狀态資訊以csv的格式重定向到指定的檔案中,以便日後檢視。例:dstat --output /root/dstat.csv & 此時讓程式默默的在背景運作并把結果輸出到/root/dstat.csv檔案中。
dstat 指令執行個體
直接輸入指令 dstat,彩色監控 UI 如下圖:
這是預設輸出顯示的資訊,預設情況下分五個區域:
預設 dstat 會每一秒重新整理一次,按 Ctrl+C 退出,dstat 還有許多具體的參數,可通過 man 檢視 |
--total-cpu-usage---- CPU使用率 |
usr:使用者空間的程式所占百分比; sys:系統空間程式所占百分比; idel:空閑百分比; wai:等待磁盤I/O所消耗的百分比; hiq:硬中斷次數; siq:軟中斷次數; |
-dsk/total-磁盤統計 |
read:讀總數 writ:寫總數 |
-net/total- 網絡統計 |
recv:網絡收包總數 send:網絡發包總數 |
---paging-- 記憶體分頁統計 |
in: pagein(換入) out:page out(換出) 注:系統的分頁活動。分頁指的是一種記憶體管理技術用于查找系統場景,一個較大的分頁表明系統正在使用大量的交換空間,通常情況下當系統已經開始用交換空間的時候,就說明你的記憶體已經不夠用了,或者說記憶體非常分散,理想情況下 page in(換入)和 page out(換出)的值是 0 0。 |
--system--系統資訊 |
int:中斷次數 csw:上下文切換 注:中斷(int)和上下文切換(csw)。這項統計僅在有比較基線時才有意義。這一欄中較高的統計值通常表示大量的程序造成擁塞,需要對 CPU 進行關注。你的伺服器一般情況下都會運作運作一些程式,是以這項總是顯示一些數值。 |
#報表輸出的時間間隔為3秒鐘,并且報表中輸出10個結果$ dstat 3 10 You did not select any stats, using -cdngy by default.----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system--usr sys idl wai hiq siq| read writ| recv send| in out | int csw 0 0 100 0 0 0| 191B 21k| 0 0 | 0 0 | 677 627 0 0 100 0 0 0| 0 0 | 80B 486B| 0 0 | 535 493 0 0 100 0 0 0| 0 0 | 159B 468B| 0 0 | 551 505 0 0 100 0 0 0| 0 185k| 60B 379B| 0 0 | 523 483 0 0 100 0 0 0| 0 0 | 60B 390B| 0 0 | 533 491 0 0 100 0 0 0| 0 9557B| 60B 379B| 0 0 | 535 500 0 0 100 0 0 0| 0 0 | 107B 458B| 0 0 | 552 506 0 0 100 0 0 0| 0 0 | 102B 535B| 0 0 | 541 501 0 0 100 0 0 0| 0 0 | 60B 282B| 0 0 | 531 501 0 0 100 0 0 0| 0 0 | 105B 1505B| 0 0 | 554 509 0 0 100 0 0 0| 0 0 | 60B 379B| 0 0 | 548 505
如想監控 swap,process,sockets,filesystem 并顯示監控的時間:
$ dstat -tsp --socket --fs ----system---- ----swap--- ---procs--- ------sockets------ --filesystem- time | used free|run blk new|tot tcp udp raw frg|files inodes02-08 11:47:13| 0 0 | 0 0 1.8|176 7 7 0 0| 1408 140k02-08 11:47:14| 0 0 | 0 0 0|176 7 7 0 0| 1408 140k02-08 11:47:15| 0 0 | 0 0 0|176 7 7 0 0| 1408 140k02-08 11:47:16| 0 0 | 0 0 0|176 7 7 0 0| 1408 140k02-08 11:47:17| 0 0 | 0 0 0|176 7 7 0 0| 1408 140k02-08 11:47:18| 0 0 | 0 0 0|176 7 7 0 0| 1408 140k02-08 11:47:19| 0 0 | 0 0 0|176 7 7 0 0| 1408 140k02-08 11:47:20| 0 0 | 0 0 0|176 7 7 0 0| 1408 140k02-08 11:47:21| 0 0 | 0 0 0|176 7 7 0 0| 1408 140k
若要将結果輸出到檔案可以加 --output filename:
dstat -tsp --socket --fs --output /commandnotfound/ds.csv
檢視全部記憶體都有誰在占用:
$ dstat -g -l -m -s --top-mem ---paging-- ---load-avg--- ------memory-usage----- ----swap--- --most-expensive- in out | 1m 5m 15m | used buff cach free| used free| memory process 0 0 |0.01 0.06 0.05|1787M 197M 10.1G 3560M| 0 0 |mysqld 208M 0 0 |0.01 0.06 0.05|1787M 197M 10.1G 3560M| 0 0 |mysqld 208M 0 0 |0.01 0.06 0.05|1787M 197M 10.1G 3560M| 0 0 |mysqld 208M 0 0 |0.01 0.06 0.05|1787M 197M 10.1G 3560M| 0 0 |mysqld 208M 0 0 |0.01 0.06 0.05|1787M 197M 10.1G 3560M| 0 0 |mysqld 208M
顯示一些關于 CPU 資源損耗的資料:
$ dstat -c -y -l --proc-count --top-cpu ----total-cpu-usage---- ---system-- ---load-avg--- proc -most-expensive-usr sys idl wai hiq siq| int csw | 1m 5m 15m |tota| cpu process 0 0 100 0 0 0| 678 628 | 0 0.04 0.05| 167|AliYunDun 0.0 0 0 100 0 0 0| 540 500 | 0 0.04 0.05| 167| 0 0 100 0 0 0| 543 499 | 0 0.04 0.05| 167| 0 0 100 0 0 0| 563 513 | 0 0.04 0.05| 167|sshd: [email protected] 0 0 100 0 0 0| 570 526 | 0 0.04 0.05| 167| 0 0 100 0 0 0| 580 513 | 0 0.04 0.05| 167|AliYunDun 0.1 0 0 100 0 0 0| 554 507 | 0 0.04 0.05| 167|AliYunDun 0.1 0 0 100 0 0 0| 545 501 | 0 0.04 0.05| 167| 0 0 100 0 0 0| 601 531 | 0 0.04 0.05| 167| 0 0 100 0 0 0| 575 518 | 0 0.04 0.05| 167|mysqld 0.1 0 0 100 0 0 0| 555 503 | 0 0.04 0.05| 167| 0 0 100 0 0 0| 561 510 | 0 0.04 0.05| 167|AliYunDunUpda0.1 0 0 100 0 0 0| 548 514 | 0 0.04 0.05| 167|redis-server 0.1 0 0 100 0 0 0| 552 505 | 0 0.04 0.05| 167|AliYunDun 0.1 0 0 100 0 0 0| 545 501 | 0 0.04 0.05| 167| 0 0 100 0 0 0| 590 519 | 0 0.04 0.05| 167|
通過 dstat --list 可以檢視 dstat 能使用的所有參數,其中上面 internal 是 dstat 本身自帶的一些監控參數,下面 /usr/share/dstat 中是 dstat 的插件,這些插件可以擴充 dstat 的功能,如可以監控電源(battery)、mysql 等。
$ dstat --listinternal: 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/usr/share/dstat: battery, battery-remain, cpufreq, dbus, disk-tps, disk-util, dstat, dstat-cpu, dstat-ctxt, dstat-mem, fan, freespace, gpfs, gpfs-ops, helloworld, innodb-buffer, innodb-io, innodb-ops, lustre, memcache-hits, mysql-io, mysql-keys, mysql5-cmds, mysql5-conn, mysql5-io, mysql5-keys, net-packets, nfs3, nfs3-ops, nfsd3, nfsd3-ops, ntp, postfix, power, proc-count, qmail, rpc, rpcd, sendmail, snooze, squid, test, thermal, top-bio, top-bio-adv, top-childwait, top-cpu, top-cpu-adv, top-cputime, top-cputime-avg, top-int, top-io, top-io-adv, top-latency, top-latency-avg, top-mem, top-oom, utmp, vm-memctl, vmk-hba, vmk-int, vmk-nic, vz-cpu, vz-io, vz-ubc, wifi
/usr/share/dstat 下面這些插件并不是都可以直接使用的,有的還依賴其他包,如想監控 mysql,必須要裝 python 連接配接 mysql 的一些包。