我有一台 Debian jessie 服务器,其中装有两块 Intel DC S3610 SSD,配置为 RAID-10。它的 IO 相当繁忙,过去几周我一直在绘制 IOPS 图表:
如你所见,大多数时候它都能顺利地执行大约 1k 次平均读取操作,峰值约为 5.5k 次,直到星期五 UTC 午夜,它突然停止并且读取操作下降到几乎为零。
我实际上是事后才注意到这一点的,因为事实上,服务器仍然在正常运行。也就是说,我相信是监控出了问题,而不是设置可以执行的 IOPS 数量出了问题。如果实际 IOPS 下降到显示的水平,我会知道,因为其他一切都会非常明显地中断。
进一步调查后发现,千字节读取/写入图表也在同一点出现问题。不过请求延迟图表没有问题。
为了排除这里使用的特定图形解决方案(cacti 和 SNMP),我查看了iostat。其输出与图表上显示的内容相匹配。
据我所知iostat获取信息来自/proc/磁盘统计信息。 根据https://www.kernel.org/doc/Documentation/iostats.txt其中将包含主设备名、次设备名和一组字段,其中第一个字段是已完成的读取次数。因此:
$ for i in {1..10}; do awk '/sda / { print $4 }' /proc/diskstats; sleep 1; done
3752035479
3752035484
3752035484
3752035486
3752035486
3752035519
3752035594
3752035631
3752036016
3752036374
在这 10 秒的时间内完成的读取次数如此之少,这简直令人难以置信。
但如果/proc/磁盘统计信息那么问题可能是什么?我该如何解决它?
同样有趣的是,无论发生什么变化,都是在午夜准确发生变化,这相当巧合。
服务器有相当多的块设备。其中187个是LVM LV,另外18个是常见的分区和md设备。
我一直在定期添加更多的 LV,因此有可能周四我达到了某种限制,尽管我没有在午夜附近添加任何限制,所以无论出了什么问题都是在午夜发生的,这仍然很奇怪。
我知道/proc/磁盘统计信息可能会溢出,但是溢出时数字通常会错误地变得很大。
仔细观察图表,我们可以看到周四的波动似乎比前一周(以及前几周)更大。放大该时间段的结果,我们可以看到:
这些读数为零或接近零的差距是不正常的,我不认为它们反映现实。也许随着我增加了更多负载,请求数量已经超过某个阈值,以至于它在周四开始显现,到周五大多数读数现在都为零?
有人知道这里发生了什么吗?
内核版本3.16.7-ckt11-1+deb8u3。