我想监视磁盘 I/O 活动,以防 I/O 处理繁重。这个Nagios 插件接缝很简单,他在其中给出了示例
Example: Tps, read and write thresholds:
./check_diskstat.sh -d sda -w 200,100000,100000 -c 300,200000,200000
Example: Average queue length threshold:
./check_diskstat.sh -d sda -W 50 -C 100
问题
由于不同的主机会有不同的空闲 I/O 活动,我怎样才能找到好的起始值来使用?
我想另一种问同样问题的方法是:iostat
应该在每个主机上使用哪些参数来查看它的“良好状态”磁盘 I/O 是什么?
底层计数器记录在https://www.kernel.org/doc/Documentation/block/stat.txt
根据从块设备读取或写入的 IOP 和扇区的绝对数量(小写
-w
和-c
选项)设置有意义的阈值需要先验了解该特定块设备的实际能力(例如通过对它们进行基准测试)。使用队列长度(大写
-W
和-C
选项)似乎更通用一些。当你得到一个坏的增加的 IO 队列时,不管底层存储有多快,你推送的读/写次数都超过了它所能支持的次数,你的应用程序就会变慢。我不知道记录的 50 和 100 毫秒是合理的还是完全任意的值。
对于我的虚拟服务器,使用绝对数字相对容易,它们以具有特定限制的风格进行配置 ,我只需要将警告/严重级别设置为例如分配限制的 80% 和 95%。
例如,具有 600 IOPS 和 10 MB/s 的风味:
将分配的
disk_read_bytes_sec
和disk_write_bytes_sec
除以 512(扇区大小)以获得虚拟磁盘将支持的扇区限制。(10 MB = 10000000 bytes) / 512 = 19531
19531 * 80% = 15624 和 600 * 80% = 480
19531 * 95% = 18749 和 600 * 95% = 570