我注意到一些云托管解决方案的磁盘 IO 非常差。这会导致一些问题,可以通过让脚本等到磁盘不那么繁忙来解决这些问题。
使用 PHP 是否可以监控文件系统的繁忙(或不那么繁忙)状态而不会使事情变得更糟?
我注意到一些云托管解决方案的磁盘 IO 非常差。这会导致一些问题,可以通过让脚本等到磁盘不那么繁忙来解决这些问题。
使用 PHP 是否可以监控文件系统的繁忙(或不那么繁忙)状态而不会使事情变得更糟?
如果这是一个 Linux 系统,您可以自己计算磁盘使用量 - 您选择实现它的语言将使用相同的概念。
您的内核很可能使用sysfs,它提供了有关您系统的大量信息/sys
;我们可以定期获取所需磁盘的信息,并根据它们之间的差异计算使用情况。
在我的系统上,我将查看磁盘sda
,您的可能会有所不同。
$ cat /sys/class/block/sda/stat
42632 25 2045318 247192 6956543 7362278 123236256 23878974 0 3703033 24119492
现在,如果我们查看内核文档,/sys/class/block/<dev>/stat
我们可以看到输出的每一列的以下描述。
Name units description
---- ----- -----------
read I/Os requests number of read I/Os processed
read merges requests number of read I/Os merged with in-queue I/O
read sectors sectors number of sectors read
read ticks milliseconds total wait time for read requests
write I/Os requests number of write I/Os processed
write merges requests number of write I/Os merged with in-queue I/O
write sectors sectors number of sectors written
write ticks milliseconds total wait time for write requests
in_flight requests number of I/Os currently in flight
io_ticks milliseconds total time this block device has been active
time_in_queue milliseconds total wait time for all requests
如果我们在 cron 计划上运行它,并区分一些等待时间,我们可以看到我们在每个操作上等待了多长时间。您还将获得有关总 IOPS 和 RW 带宽的其他统计信息。该文档对每个领域都有更深入的了解。
无论选择哪种语言,要打开以获取有关磁盘信息的文件描述符都是
/sys/class/block/<dev>/stat
如果我们按计划执行此操作,我们可以绘制精美的图表;)