常見的io監控工具包括iostat、iotop,這里從工具的安裝、使用、優缺點進行分析,并給出目前缺少的監控工具
1 iostat
- 功能:用于報告CPU(中央處理器)統計資訊和整個系統、配接器、tty設備、磁盤和CD-ROM的輸入/輸出統計資訊;通過觀察設備處于活動狀態的時間(相對于其平均傳輸速率)來整理實時報告輸出 ,主要用于監視nfs網路檔案系統和本地檔案系統,
- 引數詳解:
- iostat [ -c | -d ] [ -k | -m ] [ -t ] [ -V ] [ -x ] [ device [ ... ] | ALL ] [ -p [ device | ALL ] ] [ interval [ count ] ]
- -c: 僅顯示CPU統計資訊.與-d選項互斥.
- -d:僅顯示磁盤統計資訊.與-c選項互斥.
- -k:以K為單位顯示每秒的磁盤請求數,默認單位塊.
- -m: 以M為單位顯示每秒的磁盤請求數
- -p:device | ALL,與-x選項互斥,用于顯示塊設備及系統磁區的統計資訊.也可以在-p后指定一個設備名,如:# iostat -p hda 或顯示所有設備# iostat -p ALL
- -t : 在輸出資料時,列印搜集資料的時間.
- -V: 列印版本號和幫助資訊.
- -x : 輸出擴展資訊
- 輸出
- 輸出分為avg-cpu段和Device段


- 常用命令
- iostat -xm 1 : 每秒輸出一次cpu&device資訊
- iostat -c 1 2 : 每秒輸出一次cpu資訊,總共輸出2次
- iostat -d 2 : 間隔2秒輸出一次device資訊
- iostat -xm 1 /dev/sdb : 每秒輸出1次sdb的device資訊和cpu資訊
- iostat -p /dev/sdb -d 1 2 : 每秒輸出一次sdb的磁區的設備資訊,總共輸出2次
- 注意事項
- util代表磁盤使用率,對于hdd,使用率達到100%代表已經達到磁盤瓶頸,但對于ssd并不代表已經達到瓶頸,因為util是按照(svctm*(r/s+w/s))/1000,對于ssd因為有并發,所以達到100%只能說明單通道達到了100%
- 參考來源:(23條訊息) 優化命令iostat詳解_灌南第一帥的博客-CSDN博客_iostat命令詳解引數
2 sar
- 功能:系統維護的重要工具,主要幫助我們掌握系統資源的使用情況,特別是記憶體和CPU 的使用情況,是UNIX系統使用者應該掌握的工具之一
- 引數詳解:
- sar [options] [-A] [-o file] t [n]
- 在命令列中,n 和t 兩個引陣列合起來定義采樣間隔和次數,t為采樣間隔,是必須有的引數,n為采樣次數,是可選的,默認值是1,-o file表示將命令結果以二進制格式存放在檔案中,file 在此處不是關鍵字,是檔案名,options 為命令列選項
- -A:所有報告的總和,
- -u:CPU利用率
- -v:行程、I節點、檔案和鎖表狀態,
- -d:硬碟使用報告,
- -r:沒有使用的記憶體頁面和硬碟塊,
- -g:串口I/O的情況,
- -b:緩沖區使用情況,
- -a:檔案讀寫情況,
- -c:系統呼叫情況,
- -R:行程的活動情況,
- -y:終端設備活動情況
- -w:系統交換活動,
- -p: 列印出設備名稱,不加輸出的是設備節點,如dev8-0
- -n: 某個埠設備的網路狀態
- sar -d -v -R
- 輸出:


-
DEV: 網卡/EDEV: 網卡(錯誤)
- NFS/NFSD/SOCK/IP/EIP/ICMP/EICMP/TCP/ETCP/UDP/SOCK6/IP6/EIP6/ICMP6/EICMP6/UDP6
-

- 常用命令:
- sar -d 1 : 間隔1s輸出一次設備情況
- sar -u 1 10 : 間隔1s輸出一次cpu使用情況,總共輸出10次
- sar -d -f /var/log/sa/sa03 -p|grep -E "DEV|sd" : 從檔案sa03中過濾出磁盤資訊(sa03代表3號,最多保存一個月的日志)
- sar -r 1 10 -o mem.log : 將記憶體資訊每秒列印一次,總共列印10s,并將結果輸出到mem.log中
- sar -v 1 3 : 監控目前系統中的資源使用情況
- 參考鏈接:
- SAR命令_百度百科 (baidu.com)
- (23條訊息) sar命令詳解_上單carrry的博客-CSDN博客_sar命令
3 iotop
- 功能:一個類似 top 的工具,用來顯示實時的磁盤活動,Linux下的IO統計工具如iostat,nmon等大多數是只能統計到per設備的讀寫情況,iotop 監控 Linux 內核輸出的 I/O 使用資訊,并且顯示一個系統中行程或執行緒的當前 I/O 使用情況,它顯示每個行程/執行緒讀寫 I/O 帶寬,它同樣顯示當等待換入和等待 I/O 的執行緒/行程花費的時間的百分比,它是一款開源、免費的用來監控磁盤I/O使用狀況的類似top命令的工具,iotop可以監控行程的I/O資訊,它是Python語言撰寫的,與iostat工具比較,iostat是系統級別的IO監控,而iotop是行程級別IO監控,
- 引數:
- -o:只顯示有io操作的行程
- -b:批量顯示,無互動,主要用作記錄到檔案,
- -n NUM:顯示NUM次,主要用于非互動式模式,
- -d SEC:間隔SEC秒顯示一次,
- -p PID:監控的行程pid,
- -u USER:監控的行程用戶
- -P :只顯示行程,不顯示執行緒
- -a :顯示累計的io(從iotop啟動)
- -k : 以KB為單位顯示
- -t : 非互動模式下,顯示時間
- -q: 只在第一次監測時顯示列名. 去除頭部一些行:這個引數可以設定最多3次來移除頭部行:-q列頭部只在最初互動顯示一次;-qq列頭部不顯示;-qqq,I/O的總結不顯示
- 輸出:
- 常用命令:
- iotop -o -P : 顯示有io操作的行程
- 參考鏈接:
- (23條訊息) iotop 命令_~407的博客-CSDN博客_iotop
4 top
- 功能:監視行程和Linux整體性能的工具,所有用戶可使用
- 引數:
- top [-] [d delay] [q] [c] [S] [s] [n]
- d : 改變顯示的更新速度,或是在交談式指令列( interactive command)按 s
- q : 沒有任何延遲的顯示速度,如果使用者是有 superuser 的權限則 top 將會以最高的優先序執行
- c : 切換顯示模式,共有兩種模式,一是只顯示執行檔的名稱,另一種是顯示完整的路徑與名稱
- S : 累積模式,會將己完成或消失的子行程 ( dead child process ) 的 CPU time 累積起來
- s : 安全模式,將交談式指令取消, 避免潛在的危機
- i : 不顯示任何閑置 (idle) 或無用 (zombie) 的行程
- n : 更新的次數,完成后將會退出 top
- b : 批次檔模式,搭配 “n” 引數一起使用,可以用來將 top 的結果輸出到檔案內
- 1 :互動界面中輸入數字1,可查看每個cpu的情況
- b : 互動界面中輸入字母b,可高亮顯示當前運行行程
- 輸出:
- 常用命令:
- top 然后在互動中輸入i(僅活躍的行程),然后輸入1(查看每個cpu的情況),然后輸入b(高亮顯示)
5 vmstat
- 功能:報告關于內核執行緒、虛擬記憶體、磁盤、陷阱和 CPU 活動的統計資訊,由 vmstat 命令生成的報告可以用于平衡系統負載活動,系統范圍內的這些統計資訊(所有的處理器中)都計算出以百分比表示的平均值,或者計算其總和,Linux系統的記憶體分為物理記憶體和虛擬記憶體兩種,物理記憶體是真實的,也就是物理記憶體條上的記憶體,而虛擬記憶體則是采用硬碟空間補充物理記憶體,將暫時不使用的記憶體頁寫到硬碟上以騰出更多的物理記憶體讓有需要的行程使用,當這些已被騰出的記憶體頁需要再次使用時才從硬碟(虛擬記憶體)中讀回記憶體,這一切對于用戶來說是透明的,通常對Linux系統來說,虛擬記憶體就是swap磁區,vmstat(VirtualMeomoryStatistics,虛擬記憶體統計)是Linux中監控記憶體的常用工具,可對作業系統的虛擬記憶體、行程、CPU等的整體情況進行監視
- 引數:
-
- vmstat [-a] [-n] [-S unit] [delay [ count]} : -a顯示活躍和非活躍記憶體 -n只在開始時顯示列名稱 dealy重繪的時間間隔 count輸出的次數 -S:使用制定單位顯示(k/K/m/M等)
- vmstat [-s] [-n] [-S unit] : -s顯示系統相關資訊(如記憶體/cpu等)
- vmstat [-m] [-n] [delay [ count]] : -m 顯示slab資訊
- vmstat [-d] [-n] [delay [ count]] : -d顯示磁盤相關統計
- vmstat [-p disk partition] [-n] [delay [ count]] : -p顯示磁盤磁區統計資訊
- vmstat [-f] : -f從系統啟動至今的fork數量
- vmstat [-V] : -v顯示版本資訊
- 輸出:
- swpd: 使用虛擬記憶體大小
- free: 可用記憶體大小
- buff: 用作緩沖的記憶體大小
- cache: 用作快取的記憶體大小
- si: 每秒從交換區寫到記憶體的大小
- so: 每秒寫入交換區的記憶體大小
- bi: 每秒讀取的塊數
- bo: 每秒寫入的塊數
- in: 代表每秒的中斷數目
- 常用命令:
- vmstat 1 5: 每隔1s輸出一次,共輸出5次
- vmstat -f : 查看系統已經fork了多少次
- vmstat -a : 查看active和非active記憶體情況【注:inact和active的資料來自于/proc/meminfo】
- vmstat -s : 查看記憶體占用總體情況
- vmstat -d 1 5 : 查看5次磁盤io情況 【注:這些資訊主要來自于/proc/diskstats】
- vmstat -p /dev/sdb1 : 查看磁區sdb1的情況,只能用來查看磁區
- 參考鏈接:
- (23條訊息) vmstat詳解_lin502的博客-CSDN博客_vmstat
- (23條訊息) 優化命令----Vmstat命令(有手就行)_煙花雨..的博客-CSDN博客_vmstat命令
6 pidstat
- 簡介:
- sysstat工具的一個命令,用于監控全部或指定行程的cpu、記憶體、執行緒、設備IO等系統資源的占用情況,pidstat首次運行時顯示自系統啟動開始的各項統計資訊,之后運行pidstat將顯示自上次運行該命令以后的統計資訊,用戶可以通過指定統計的次數和時間來獲得所需的統計資訊
- 引數:
- pidstat [ 選項 ] [ <時間間隔> ] [ <次數> ]
- -u:默認的引數,顯示各個行程的cpu使用統計
- -r:顯示各個行程的記憶體使用統計
- -d:顯示各個行程的IO使用情況
- -p:指定行程號
- -w:顯示每個行程的背景關系切換情況
- -t:顯示選擇任務的執行緒的統計資訊外的額外資訊
- -T { TASK | CHILD | ALL } 這個選項指定了pidstat監控的,TASK表示報告獨立的task,CHILD關鍵字表示報告行程下所有執行緒統計資訊,ALL表示報告獨立的task和task下面的所有執行緒,注意:task和子執行緒的全域的統計資訊和pidstat選項無關,這些統計資訊不會對應到當前的統計間隔,這些統計資訊只有在子執行緒kill或者完成的時候才會被收集,
- -V:版本號
- -h:在一行上顯示了所有活動,這樣其他程式可以容易決議,
- -I:在SMP環境,表示任務的CPU使用率/內核數量
- -l:顯示命令名和所有引數
- 輸出:
- 常用命令:
- pidstat -d 1 -l: 顯示磁盤io使用情況,并顯示詳細指令
- pidstat -r : 顯示記憶體占用情況
- pidstat -u : 顯示cpu占用情況
- 參考鏈接:
- (23條訊息) pidstat 命令詳解_本兮言的博客-CSDN博客_pidstat
7 pt-ioprofile
- 簡介
- Percona Toolkit簡稱pt工具,是Percona公司開發用于管理MySQL的工具,功能包括檢查主從復制的資料一致性、檢查重復索引、定位IO占用高的表檔案、在線DDL等,DBA熟悉掌握后將極大提高作業效率,常用來定位哪個檔案IO占用比較高,其原理是對某個pid附加一個strace行程進行IO分析, --profile-pid指定pid, --cell=sizes,該引數將結果已 B/s 的方式展示出來
- 引數:
- pt-ioprofile --profile-pid=18934 --cell=sizes
- 輸出:
- 常用命令:
- pt-ioprofile --profile-pid=11220--cell=sizes
- 參考鏈接:
- pt工具之pt-ioprofile - 簡書 (jianshu.com)
- 注意事項:
- pt-ioprofile可能會凍結服務,crash行程,是行程變得更糟糕,或者使行程休眠
- pt-ioprofile是一個有干擾的工具,一般不用在生產環境中,除非你能理解和接受風險
8 lsof
- 簡介:lsof(list open files),一個列出當前系統打開檔案的工具,在linux環境下,任何事物都以檔案的形式存在,通過檔案不僅僅可以訪問常規資料,還可以訪問網路連接和硬體,因為 lsof 需要訪問核心記憶體和各種檔案,所以必須以 root 用戶的身份運行它才能夠充分地發揮其功能
- 引數:
- lsof [option] filename
- -c: 顯示command列中包含string的行程所打開的檔案
- -u: 顯示某個用戶打開的檔案
- -a: 顯示滿足后續所有條件的檔案
- -p: 列出行程號所打開的檔案
- -h: 顯示幫助資訊
- -v: 顯示版本資訊
- -n:列出使用nfs的檔案
- +D: 遞回打開目錄下的所有檔案
- +d:列出目錄下被打開的檔案
- -d:列出占用該檔案號的行程
- -g:列出gid(groupid)號行程詳情
- -t:僅列出行程
- -r: 回圈列出檔案直到被中斷,后面數字代表回圈的頻率,
- 輸出:
-
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME init 1 root cwd DIR 3,3 1024 2 / init 1 root rtd DIR 3,3 1024 2 / init 1 root txt REG 3,3 38432 1763452 /sbin/init init 1 root mem REG 3,3 106114 1091620 /lib/libdl-2.6.so init 1 root mem REG 3,3 7560696 1091614 /lib/libc-2.6.so init 1 root mem REG 3,3 79460 1091669 /lib/libselinux.so.1 init 1 root mem REG 3,3 223280 1091668 /lib/libsepol.so.1 init 1 root mem REG 3,3 564136 1091607 /lib/ld-2.6.so init 1 root 10u FIFO 0,15 1309 /dev/initctl
- Command: 行程名稱
- PID: 行程號
- USER: 用戶名
- FD: 檔案描述符,如cwd(某個行程運行時所在的目錄) 、txt(程式代碼,如應用程式的二進制庫或者是共享庫)、rtd(根目錄)、mem(記憶體映射檔案)、mmap(記憶體映射設備)、數字大頭的(0|1|2U|R|W)
- TYPE: 型別,REG(檔案)、DIR(目錄)、CHR(字符)、BLK(塊設備)、UNIX(套接字)、FIFO(先進先出佇列)、IPV4(網際協議套接字)
- DEVICE: 指定磁盤的名稱
- SIZE: 檔案的大小
- NODE:索引節點,檔案在磁盤上的標識
- NAME:打開檔案的確切名稱
-
- 常用命令
- lsof filename : 打開filename的所有行程
- lsof -c string: 顯示command列中包含string的行程所打開的檔案
- lsof -u user: 顯示所屬user行程打開的檔案
- lsof -a -c string -u user :同時滿足-c&-u兩個屬性的被打開的檔案
- lsof -u ^baihh : 顯示不屬于baihh行程的檔案
- lsof -i : 顯示所有打開的埠
- lsof -i :80 : 顯示所有打開80埠的行程
- lsof /dev/sda[1234] : 顯示打開sda1 sda2 sda3 sda4中任意一個的設備的檔案
- lsof -p 300,400,500 : 列出行程300、400、500打開的所有檔案
- lsof -t -i: 列出使用某個埠的行程pid
- 參考鏈接:
- linux檔案描述符總結 - 知乎 (zhihu.com)
- lsof_百度百科 (baidu.com)
- lsof命令詳解_demon7552003的博客-CSDN博客_lsof
- lsof命令詳解_ITPUB博客
9 dstat
- 簡介
- 一個用來替換vmstat、iostat、netstat、nfsstat和ifstat這些命令的工具,可以實時的監控cpu、磁盤、網路、IO、記憶體等使用情況,是一個全能系統資訊統計工具,與sysstat相比,dstat擁有一個彩色的界面,在手動觀察性能狀況時,資料比較顯眼容易觀察;而且dstat支持即時重繪,譬如輸入dstat 3即每三秒收集一次,但最新的資料都會每秒重繪顯示,和sysstat相同的是,dstat也可以收集指定的性能資源,譬如dstat -c即顯示CPU的使用情況
- 使用python撰寫的,方便擴展現有的作業任務
- 引數
- dstat [-afv] [option] [gap count]: 默認1s顯示一次資訊
- -c: 顯示cpu資訊
- -C:只顯示指定cpu的資訊
- -d:顯示磁盤設備資訊
- -n:顯示網路設備資訊
- -N: 指定要顯示的網卡
- -g:顯示頁面(page)相關資訊
- -y:顯示系統(system)相關資訊
- -a: 默認選項,等同于-cdngy
- -p: 顯示行程狀態
- -m: 顯示記憶體使用情況
- -D: hda,total: include hds and total
- -s: 顯示交換磁區使用情況
- -S:類似于D/N
- -v: 等同于-pmgdsc -D total
- -r: io請求情況
- --output : 將輸出結果以csv格式重定向到指定檔案中(可用excel打開)
- -aio: 開啟同步io統計
- -fs:開啟檔案系統統計
- -ipc:開啟ipc統計
- -lock:開啟檔案鎖統計
- -raw:開啟raw統計(raw lock)
- -socket: 開啟socket統計
- -tcp/-udp/-unix/-vm: 開啟相關統計
- -stat 通過插件名稱開啟插件擴展,可能的插件包括(aio/cpu/disk/disk24/disk240ld/fs/int/mem/net/socket/vm等)
- -list:列出所有的插件名稱
- -float/-integer: 終端顯示浮點型/整型
- -nocolor: 無需顏色
- --disk-util : 顯示某一時刻磁盤的繁忙程度
- --disk-tps:磁盤每秒事務數統計
- -top-io 顯示正常I/O最大的行程
- --top-io-adv:詳細顯示
- --freespace 顯示當前磁盤空間使用率
- -top-bio 顯示塊I/O最大的行程,僅顯示行程
- --top-bio-ad : 詳細顯示最消耗塊io的行程,包括pid和其他資訊
- dstat --top-latency:顯示哪個行程有最大的延遲
- 輸出
-
[root@iZ23uulau1tZ ~]# dstat ----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 99 0 0 0|7706B 164k| 0 0 | 0 0 | 189 225 0 0 100 0 0 0| 0 0 |4436B 826B| 0 0 | 195 248 1 0 99 0 0 0| 0 0 |4744B 346B| 0 0 | 203 242 0 0 100 0 0 0| 0 0 |5080B 346B| 0 0 | 206 242 0 1 99 0 0 0| 0 0 |5458B 444B| 0 0 | 214 244 1 0 99 0 0 0| 0 0 |5080B 346B| 0 0 | 208 242
- hiq: cpu硬中斷的次數
- siq:cpu軟中斷的次數
- int:系統的中斷次數(interrrupt)
- csw:系統的背景關系切換次數(context switch)
-
- 常用命令
- dstat -stat disk --disk-util --top-io --freespace
- dstat -dD sda --top-io-adv: 顯示指定盤的耗用cpu最多的行程【待驗證】
- dstat --dstat : 顯示dstat本身的cpu、延遲等
- 參考鏈接
- dstat命令_Linux dstat命令使用詳解:通用的系統資源統計工具 (ywnz.com)
- linux命令---dstat - 簡書 (jianshu.com)
- dstat 命令詳解_Jay112011的博客-CSDN博客_dstat命令詳解
10 atop
- 簡介
11 sysdig
12 sysstat
參考:Linux 系統監控工具 atop - 走看看 (zoukankan.com)
Linux系統的atop監控工具 (aliyun.com)
11 ioping
參考:(23條訊息) linux 查看共享磁盤_用于檢測查看磁盤活動的Linux命令_小透明熊熊的博客-CSDN博客
總結:以上工具通過某些指令都可以用來分析磁盤io,但目前的工具還缺少分析指定盤的帶寬占用行程統計,而此統計在實際應用有重要的意義,比如系統盤io占用,一般我們需要分析哪個行程占用系統盤的io資源比較多,據此來限制此行程的操作,若各位有這種工具,歡迎推薦,共同進步,增長見識!!!
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/518690.html
標籤:其他
上一篇:ansible組態檔
下一篇:Ansible




