磁碟IO效能監控(Linux 和 Windows)
磁碟的IO效能是衡量計算機總體效能的一個重要指標。Linux提供了iostat命令來獲卻磁碟輸入/輸出(即IO)統計資訊,Windows則提供了WMI介面,可以透過編寫一個簡單的指令碼來獲取與iostat相當的功能。
1、Linux下的iostat命令
iostat -d -k -t 2
每隔2秒統計一次磁碟IO資訊,直到按Ctrl+C終止程式,-d 選項表示統計磁碟資訊, -k 表示以每秒KB的形式顯示,-t 要求列印出時間資訊,2 表示每隔 2 秒輸出一次。第一次輸出的磁碟IO負載狀況提供了關於自從系統啟動以來的統計資訊。隨後的每一次輸出則是每個間隔之間的平均IO負載狀況。
執行該命令後,輸出:
Linux 2.6.9-67.0.7.ELsmp (localhost.localdomain) 11/19/2008
Time: 03:15:25 PM
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 3.53 26.66 54.76 30122033 61864280
sda1 0.51 1.07 1.73 1207649 1949740
sda2 0.00 0.00 0.00 538 256
sda3 13.84 25.59 53.03 28913291 59914092
Time: 03:15:27 PM
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 275.38 0.00 1738.69 0 3460
sda1 14.57 0.00 58.29 0 116
sda2 0.00 0.00 0.00 0 0
sda3 419.60 0.00 1678.39 0 3340
...
每次輸出都會列印時間資訊, 接下來顯示磁碟IO情況列表。
Device: 顯示磁碟名稱
tps: 表示每秒鐘輸出到物理磁碟的傳輸次數。一次傳輸就是一個對物理磁碟的 I/O 請求。多個邏輯請求可被併為對磁碟的一個單一 I/O 請求。傳輸具有中等的大小。
kB_read/s: 每秒從磁碟讀取的資料量,單位為KB。
kB_wrtn/s: 每秒從寫入磁碟的資料量,單位為KB。
Kb_read: 讀取的 KB 總數。
Kb_wrtn: 寫入的 KB 總數。
Windows Performance Counter中,哪個引數是監控伺服器的total IOPS的?
Windows Server 2003/2008/2012是否相同?
\LogicalDisk\Avg. Disk Sec/Read
\LogicalDisk\Avg. Disk Sec/Write\LogicalDisk\Disk Bytes/Sec\LogicalDisk\Disk Reads/Sec\LogicalDisk\Disk Writes/Sec\LogicalDisk\Split IO/sec\LogicalDisk\Disk Transfers/sec
關於Performance Counter監控伺服器的IOPS更多的資料,您可以參考:
2、WMI中的 Win32_PerfFormattedData_PerfDisk_LogicalDisk 物件
Win32_PerfFormattedData_PerfDisk_LogicalDisk 代表邏輯磁碟效能資料物件,利用該物件可以獲得磁碟的心能資訊。Win32_PerfFormattedData_PerfDisk_LogicalDisk物件有以下一些主要的屬性:
Name: 磁碟名稱
DiskTransfersPerSec:每秒磁碟傳輸次數。
DiskReadBytesPerSec:每秒從磁碟讀取得資料量,單位為Byte。
DiskWriteBytesPerSec:每秒從磁碟讀取得資料量,單位為Byte。
PercentFreeSpace:可用磁碟百分比。
3、使用 Win32_PerfFormattedData_PerfDisk_LogicalDisk 的注意事項
在使用 Win32_PerfFormattedData_PerfDisk_LogicalDisk 時,需要注意:
(1)不能使用 objWMIService.ExecQuery 執行 Select 語句來獲取磁碟效能資料
(2)必須使用 WbemScripting.SWbemRefresher 將 Win32_PerfFormattedData_PerfDisk_LogicalDisk 加入,然後不斷呼叫 Refresh 方法重新整理資料來獲取效能資訊
(3)第一次重新整理的時候,並不能獲取有用的資料,從第二次開始,才能獲取到磁碟效能資料
(4)以上問題與 WMI 中效能監控使用計數器的機制有關
4、使用舉例
為了對監控磁碟效能提供一個良好的使用者介面,可以利用VBScript編寫指令碼來獲取磁碟效能資料。指令碼的程式碼如下:
'Script File Name: DiskMonitor.vbs
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!//" & strComputer & "/root/cimv2")
set objRefresher = CreateObject("WbemScripting.SWbemRefresher")
Set colDisks = objRefresher.AddEnum(objWMIService, "Win32_PerfFormattedData_PerfDisk_LogicalDisk").objectSet
If Wscript.Arguments.Count = 0 Then
objRefresher.Refresh
For Each objDisk in colDisks
Wscript.Echo objDisk.Name & " " & objDisk.DiskReadBytesPerSec & " " & objDisk.DiskWriteBytesPerSec
Next
End If
If Wscript.Arguments.Count = 1 Then
Interval = CInt(Wscript.Arguments(0)) * 1000
Do While True
objRefresher.Refresh
Wscript.Echo
Wscript.Echo "Time: " & " " & Time()
Wscript.Echo FormatStr("Device:", 15, 0) & FormatStr("tps", 7, 1) & FormatStr(" kB_read/s", 13, 1) & FormatStr("kB_wrtn/s", 13, 1) & FormatStr("Free Space", 13, 1)
For Each objDisk in colDisks
Wscript.Echo FormatStr(objDisk.Name, 15, 0) & FormatStr(objDisk.DiskTransfersPerSec, 7, 1) & FormatStr(objDisk.DiskReadBytesPerSec, 13, 1) & FormatStr(objDisk.DiskWriteBytesPerSec, 13, 1) & FormatStr(objDisk.PercentFreeSpace & "%", 13, 1)
Next
Wscript.Sleep Interval
Loop
End If
If Wscript.Arguments.Count = 2 Then
i = 0
Interval = CInt(Wscript.Arguments(0)) * 1000
Count = CInt(Wscript.Arguments(1))
Do While i < Count
objRefresher.Refresh
Wscript.Echo
Wscript.Echo "Time: " & " " & Time()
Wscript.Echo FormatStr("Device:", 15, 0) & FormatStr("tps", 7, 1) & FormatStr(" kB_read/s", 13, 1) & FormatStr("kB_wrtn/s", 13, 1) & FormatStr("Free Space", 13, 1)
For Each objDisk in colDisks
Wscript.Echo FormatStr(objDisk.Name, 15, 0) & FormatStr(objDisk.DiskTransfersPerSec, 7, 1) & FormatStr(objDisk.DiskReadBytesPerSec, 13, 1) & FormatStr(objDisk.DiskWriteBytesPerSec, 13, 1) & FormatStr(objDisk.PercentFreeSpace & "%", 13, 1)
Next
Wscript.Sleep Interval
i = i + 1
Loop
End If
Function FormatStr(str, tLen, direction)
sLen = Len(str)
fStr = ""
num = tLen - sLen
j = 0
Do While j < num
fStr = fStr & " "
j = j + 1
Loop
If direction = 1 Then
fStr = fStr & str
Else
fStr = str & fStr
End If
FormatStr = fStr
End Function
使用舉例:
(1)CSCript DiskMonitor.vbs
止重新整理一次 Win32_PerfFormattedData_PerfDisk_LogicalDisk 物件,不會獲取到有用的資料。
(2)CSCript DiskMonitor.vbs 2
每隔 2 秒獲取一次磁碟效能資料並輸出,直到按 Ctrl+C 終止程式。
(3)CSCript DiskMonitor.vbs 2 100
每隔 2 秒獲取一次磁碟效能資料並輸出,總共獲取 100 次,然後退出。
該指令碼輸出的資訊包括 DiskTransfersPerSec、DiskReadBytesPerSec、DiskWriteBytesPerSec 和 PercentFreeSpace。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/271063/viewspace-1870896/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- zabbix監控linux磁碟io的模板Linux
- nagios監控linux磁碟io的bugiOSLinux
- Cacti安裝磁碟IO監控
- 在Linux中,如何進行磁碟效能監控?Linux
- Linux的IO效能監控工具iostat詳解LinuxiOS
- Linux 效能監測:IOLinux
- linux 下監控磁碟空間Linux
- linux效能監控命令Linux
- Linux 效能監控工具Linux
- linux效能監控工具——NAGIOS和OVOLinuxiOS
- 用LoadRunner監控windows的效能Windows
- 理解 Linux 的平均負載和效能監控Linux負載
- Linux發郵件磁碟空間監控Linux
- [linux]磁碟監控程式並且發EMailLinuxAI
- Windows效能計數器監控實踐Windows
- 監控寶SQL Server效能監控的功能和配置SQLServer
- UNIX和linux系統效能監控工具oswatcherLinux
- Linux程式管理與效能監控Linux
- linux效能監控利器20個Linux
- 效能監控和分析工具--nmon
- 如何監測 Linux 的磁碟 I/O 效能Linux
- stap監控IO指令碼指令碼
- Linux系統監控之磁碟I/O篇Linux
- Linux和UNIX監控Linux
- Linux 常用系統效能監控命令Linux
- zt:Linux效能監控之Memory篇Linux
- Linux系統磁碟IOLinux
- 簡述Linux磁碟IOLinux
- 【shell】磁碟監控指令碼指令碼
- 在 Linux 中如何使用 iotop 和 iostat 監控磁碟 I/O 活動?LinuxiOS
- 如何用bash shell 指令碼監控 Linux記憶體、磁碟和 CPU?指令碼Linux記憶體
- Linux iostat命令詳解和使用例項(磁碟操作監控工具)LinuxiOS
- MYSQL和SQLServer效能監控指標MySqlServer指標
- 前端效能監控前端
- php效能監控PHP
- Prometheus+Grafana實現服務效能監控:windows主機監控、Spring Boot監控、Spring Cloud Alibaba Seata監控PrometheusGrafanaWindowsSpring BootCloud
- Linux系統效能監控採集項Linux
- 幾個常用的linux效能監控命令Linux