dstat性能監控工具常用參數分析
一、dstat性能工具簡介
- 1、vmstat是Virtual Meomory Statistics(虛擬內存統計)的縮寫,可對操作系統的虛擬內存、進程、CPU活動進行監控;
2、iostat,用於報告中央處理器(CPU)統計信息和整個系統、適配器、tty 設備、磁盤和 CD-ROM 的輸入/輸出統計信息;
3、Netstat是控制檯命令,是一個監控TCP/IP網絡的非常有用的工具,它可以顯示路由表、實際的網絡連接以及每一個網絡接口設備的狀態信息;
4、nfsstat命令顯示關於NFS和到內核的遠程過程調用(RPC)接口的統計信息,也可以使用該命令重新初始化該信息;
5、ifstat工具是個網絡接口監測工具,比較簡單看網絡流量;- dstat是一個用來替換vmstat、iostat、netstat、nfsstat和ifstat這些命令的工具,是一個全能系統信息統計工具;
- 與sysstat相比,dstat擁有一個彩色的界面,在手動觀察性能狀況時,數據比較顯眼容易觀察;
- dstat支持即時刷新,也可自定義刷新時間,以及數量;
- 和sysstat相同的是,dstat也可以收集指定的性能資源,例如 dstat -c 即顯示CPU的使用情況;
二、dstat性能工具安裝
[root@localhost ~]# yum install -y dstat
三、dstat工具參數說明
參數 | 作用 |
---|---|
-c, --cpu | 顯示CPU系統佔用,用戶佔用,空閒,等待,中斷,軟件中斷等信息 |
-C 0,3,total | 統計指定CPU或彙總信息 |
-d, --disk | 顯示磁盤情況 |
-D total,hda | 統計指定磁盤或彙總信息 |
-g, --page | 顯示頁面使用情況 |
-i, --int | 顯示中斷統計 |
-I 5,eth2 | 統計系統負載情況,包括1分鐘、5分鐘、15分鐘平均值 |
-l, --load | enable load stats |
-m, --mem | 顯示內存情況 |
-n, --net | 顯示網絡情況 |
-N eth1,total | 可以指定網絡接口 |
-p, --proc | 統計進程信息,包括runnable、uninterruptible、new |
-r, --io | 統計I/O請求情況,包括讀寫請求 |
-s, --swap | 顯示swap情況 |
-S swap1,total | 可以指定多個swap |
-t, --time | 顯示統計時時間,對分析歷史數據非常有用 |
-y, --sys | 統計系統信息,包括中斷、上下文切換 |
–ipc | 報告IPC消息隊列和信號量的使用情況 |
–lock | 統計lock信息 |
–socket | 用來顯示tcp、udp、raw端口狀態 |
–raw | 統計raw信息 |
–tcp | 統計tcp信息 |
–udp | 統計udp信息 |
–unix | 統計unix信息 |
–output file | 寫入到CVS文件中,這個比較常用 |
四、dstat工具使用示例
dstat 2 5
每兩秒顯示一次,一共只顯示5條信息
1、CPU相關參數
-l, --load
展示1分鐘、5分鐘和15分鐘內的平均負載
-c, --cpu
展示cpu狀態:usr用戶佔比、sys系統佔比、idl空閒佔比、wai等待次數,這四個加和是100,
hiq硬中斷次數,siq軟中斷次數
dstat -cC 0,3,total : -C 必須和-c配合使用
分別展示 第0顆、第3顆、總體cpu狀態
–snooze
展示每秒的CPU時鐘頻率,
腳本位置/usr/share/dstat/dstat_snooze.py
2、進程相關參數
- 展示當前時刻的進程狀態:可運行態(就緒態)
無法中斷的睡眠態(等待態),新進程; - 文檔原文爲:runnable, uninterruptible, new;
- 就緒態進程多代表負載較高,配合-l參數確認,
比如run爲80,即當前有80個進程等待CPU處理; - 等待態進程多代表當前IO可能有問題;
等待態進程是內存中等待非CPU資源的進程,
一般是等待IO,可以根據-c的wai列確認,
進一步根據-g的in列確認是否是內存瓶頸後的恢復期,
配合-s參數查看換頁使用情況,-d查看當前bio情況; - 如果-d的bio的read和-g的in差不多,
表明當前IO主要是換頁到內存加載造成的,
即內存不足後的恢復期; - 如果-g和-s表明換頁未使用,但是-d居高,
則說明當前有大量進程等待磁盤IO; - 使用–top-bio-adv確定bio最高的進程,
如果-d也不高,但是-n較高,說明進程等待網絡IO - 使用–top-io-adv確定IO最高的進程。
-p, --proc
統計進程信息,包括runnable、uninterruptible、new
–proc-count
展示進程數量,側面反映系統負載
-y, --sys
1、展示系統中斷次數int和上限文切換次數csw;
2、上下文切換:CPU運行任務1,切換運行就緒態任務2;
3、任務1可能變成就緒態(CPU時間片耗光),也可能變成等待態(等待IO等非CPU資源);
4、CPU的處理時間片較短,中斷和上下文切換次數數字會很大,也能從側面反映負載,如果中斷和上下文切換暴漲,表明負載過大,或者程序設計不合理,或者kernel級別的BUG;
-i, --int
展示中斷狀態,如下圖,設備號爲18、19和56的設備產生了中斷,
查看/proc/interrupts確定設備號對應的設備信息。
dstat -i -I 18,19 :-I 必須和-i配合使用
指定設備號展示中斷狀態
–ipc
展示IPC(進程間通信)狀態,包括msg消息隊列 、sem線程隊列、shm共享內存使用
–dbus number of dbus connections (needs python-dbus)
展示dbus連接數
3、進程最耗資源統計
以下腳本都存在於目錄/usr/share/dstat中
–top-cpu (-t 代表時間)
展示最耗CPU的進程名和CPU佔比
–top-cpu-adv (-t 代表時間)
展示最耗CPU的進程名、PID和CPU佔比以及讀寫信息,
這個讀寫信息是一個差值,推測是內存的讀寫。
–top-cputime (-t 代表時間)
展示耗費CPU時間最多的進程名和耗費時間(ms)
–top-cputime-avg (-t 代表時間)
展示平均最耗CPU時間片的進程名和時間耗費(ms)
–top-latency (-t 代表時間)
顯示延遲最高的進程名和延遲時間(ms)
–top-latency-avg
顯示平均延遲最高的進程名和延遲時間(ms)
–top-bio
展示當前最耗block I/O的進程名和讀寫的容量
–top-bio-adv
展示當前最耗block I/O的進程名、PID和讀寫容量以及CPU佔比
即最高磁盤IO的進程
–top-io
展示最耗IO的進程名和IO讀寫信息,
被統計的IO信息包括blockIO和內存還有網絡等全部,
因此如果要判定最耗磁盤讀寫的進程,應該使用–top-bio,
某一時刻,最耗IO和最耗blockIO的進程不一定是同一個。
–top-io-adv
展示最耗IO的進程名、PID和讀寫信息以及CPU使用佔比
–top-mem
展示最耗內存的進程名和內存消耗
–top-oom
展示最先OOM殺死的進程,OOM是內存回收機制
–top-childwait
展示等待子進程相應最多的進程,
即等待子進程最多的父進程。
show process waiting for child the most
4、內存相關參數
-m, --mem
展示內存狀態,包括used, buffers, cache, free
–vm (hard pagefaults, soft pagefaults, allocated, free)
展示虛擬內存狀態,包括:majpf(hard pagefaults),
minpf(soft pagefaults),alloc和free,具體意義未知。
5、換頁空間相關參數
-g, --page
展示內存到換頁空間(swap)的使用情況,
從內存到換頁是out,從換頁到內存是in,
只有頻繁的in和out才表明內存不足。
6、網絡相關參數
-n, --net
展示總體網絡收發狀態,折算後附帶單位友好展示
dstat -n -N eth0,total : -N 必須和-n配合使用
當存在多網卡時,可以分別指定展示各個網卡的收發狀態
–net-packets
展示收發的包數量
–socket
展示套接字狀態,包括tot總數量、tcp套接字數量、udp套接字數量、
raw原始套接字數量、frg(ip-fragments IP碎片)套接字數量
–raw
展示原始套接字(raw sockets接收本機網卡上的數據幀或者數據包的套接字)狀態
–tcp (listen, established, syn, time_wait, close)
展示tcp網絡連接狀態,lis監聽的數量、act(established)活動的確立的數量、
synTCP/IP的握手數量、tim(time_wait)發起關閉後的等待關閉態數量、
clo關閉態數量,即命令netstat -tpln對應記錄的摟取合併
–udp
展示udp網絡連接狀態,包括lis監聽數量和act活動數量
–unix (datagram, stream, listen, active)
展示數據報(實現UDP)、虛電路(實現TCP/IP)數量,包括:
dgm數據報數量、str虛電路數量、lis虛電路監聽數量、act虛電路活動數量
7、硬盤相關參數
-d, --disk
展示磁盤設備讀寫總計,折算後附帶單位友好展示
-D 必須和-d配合使用:dstat -dD sda,sda2,total
分別展示設備sda和sda2以及總體的讀寫狀態
-r, --io
展示I/O請求狀態,包括讀請求次數和寫請求次數
–aio
展示異步io狀態速度
–disk-tps
展示每個磁盤每秒事物讀寫數量
–disk-util
展示每個磁盤使用百分比
8、文件系統參數
–freespace
展示每個文件系統的使用情況
–fs
展示文件系統狀態,包括打開的文件數量和正在使用的inode數量
9、MYSQL相關參數
–mysql5-conn
展示mysql庫的已經打開的連接數數量和佔比,
數據由以下mysql庫SQL提供:
show global variables like ‘max_connections’;
show global status like ‘Threads_connected’;
ThCo當前打開的連接數數量,%Con數量佔總連接數的百分比
–mysql5-io
展示mysql庫與所有客戶端的交互字節數:
recv(Bytes_received)從所有客戶端接收到的字節數,
sent(Bytes_sent)發送給所有客戶端的字節數,
數據由以下mysql庫SQL提供:
show global status like ‘Bytes_%’;
–mysql5-keys
展示mysql庫的鍵緩存信息:
used(Key_blocks_used)鍵緩存內使用的塊數量,
該值爲高水位線標記,說明已經同時最多使用了多少塊。
read(Key_reads)從硬盤讀取鍵的數據塊的次數,
如果Key_reads較大,則Key_buffer_size值可能太小,
可以用Key_reads/Key_read_requests計算緩存損失率。
writ(Key_writes)向硬盤寫入將鍵的數據塊的物理寫操作的次數。
rreq(Key_read_requests)從緩存讀鍵的數據塊的請求數。
wreq(Key_write_requests)將鍵的數據塊寫入緩存的請求數。
數據由以下mysql庫SQL提供:
show global status like ‘Key_%’;
–mysql-keys
和參數–mysql5-keys功能相似,但只展示當前會話的keys信息,
數據由以下mysql庫SQL提供:
show status like ‘Key_%’;
–mysql-io
和參數–mysql5-io功能相似,但只展示當前會話的IO信息,
數據由以下mysql庫SQL提供:
show status like ‘Bytes_%’;
10、dstat數據展示相關參數
- –noheaders
監控項的名稱和參數信息(頭兩行信息)只輸出一次,
數據滿屏後不再重複輸出。- –output outputfile.csv
將監控信息以csv格式寫入文件- –float
使用小數顯示數據,與參數–integer互斥- –integer
使用整數顯示數據,與參數–float互斥- –bw, --blackonwhite
改變數據輸出的顏色,白色背景- –nocolor
關閉彩色顯示- –noupdate
當數據刷新間隔大於1秒時,當前數據行會不斷刷新,
使用該參數關閉刷新功能。- –profile
記錄dstat命令調用的組件和時間資源消耗,生成日誌文件,
例:dstat --profile 1 5- –list
列出內部和外部插件名稱。