我如何检查HDD与PHP的繁忙程度?

Mat*_*att 9 php filesystems diskusage

我注意到一些云托管解决方案的磁盘IO非常糟糕.这会导致一些问题可以通过让脚本等到磁盘不太忙而解决.

使用PHP可以监视文件系统的繁忙(或不那么忙)状态而不会让事情变得更糟吗?

Mat*_*ark 17

如果这是一个Linux系统,您可以自己计算磁盘使用情况 - 您选择实现它的语言将使用相同的概念.

你的内核最有可能使用sysfs,它可以提供有关你系统的大量信息/sys; 我们可以定期获取有关所需磁盘的信息,并根据它们之间的差异计算使用情况.

在我的系统上,我将查看磁盘sda,您的可能会有所不同.

$ cat /sys/class/block/sda/stat
   42632       25  2045318   247192  6956543  7362278 123236256 23878974        0  3703033 24119492
Run Code Online (Sandbox Code Playgroud)

现在,如果我们查看内核文档,/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
Run Code Online (Sandbox Code Playgroud)

如果我们按照cron计划执行此操作,并延迟一些等待时间,我们可以看到我们等待每个操作的时间.您还将获得有关总IOPS和RW带宽的其他统计信息.文档在每个领域都有更深入的内容.

无论选择何种语言,都要打开文件描述符以获取有关磁盘的信息

/sys/class/block/<dev>/stat
Run Code Online (Sandbox Code Playgroud)

如果我们按计划执行此操作,我们可以绘制精美的图表;)

在此输入图像描述

  • 这个答案太棒了,我很遗憾没有机会尝试一下.然后我记得我很高兴不再参与那个项​​目. (7认同)
  • 很抱歉重振这篇文章; 在meta上看到它并且不得不分享我的图表:D但是无论项目如何,图表总是能够识别问题是一件好事!祝好运!(我使用[Grafana](https://grafana.com/))抱歉,我没有尽快看到帖子! (3认同)
  • 嘿,没问题.你解决了我对如何处理这个问题的担忧.现在这很有用,这是一场胜利. (2认同)