為什麼 /proc/diskstats 數字突然低得令人難以置信?

為什麼 /proc/diskstats 數字突然低得令人難以置信?

我有一台 Debian jessie 伺服器,其中有兩台 Intel DC S3610 SSD,採用 RAID-10。 IO 相當繁忙,過去幾週我一直在繪製 IOPS 圖表:

sda 的磁碟 IO 事務圖

正如您所看到的,大多數時候它都在愉快地執行大約 1k 的平均讀取操作,峰值約為 5.5k,直到週五午夜 UTC 時突然停止,讀取操作幾乎降至零。

實際上,我只是追溯地註意到這一點,因為事實是,伺服器仍在按其應有的方式運行。也就是說,我認為損壞的是監控,而不是設定可以執行的 IOPS 量。如果實際 IOPS 下降到顯示的水平,我就會知道,因為其他一切都會明顯崩潰。

經過進一步調查,千字節讀/寫圖也在同一點被破壞。不過,請求延遲圖還可以。

為了排除此處使用的特定圖形解決方案(cacti 和 SNMP),我查看了iostat。其輸出與圖表上顯示的內容相符。

據我所知iostat獲取其訊息/proc/diskstats。根據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/diskstats對我撒謊那麼問題可能是什麼以及我如何希望解決它?

同樣有趣的是,無論發生什麼變化,都在午夜發生變化,這相當巧合。

伺服器有相當多的塊設備。其中187個是LVM LV,另外18個是常用的分區和md設備。

我一直在定期添加更多 LV,因此週四我可能達到了某種限制,儘管我沒有在午夜附近的任何地方添加任何內容,所以無論發生什麼問題都在午夜發生,這仍然很奇怪。

我知道/proc/diskstats可能會溢出,但當溢出時,數字通常會錯誤地巨大。

仔細觀察一下圖表,我們可以發現週四的情況似乎比之前一周(和幾週)的情況更加尖刻。放大該時期的結果我們可以看到:

IOPS、sda 圖表,重點關注週四

這些零或接近零讀數的差距是不正常的,我不認為它們反映了現實。也許請求數量已經超過了某個閾值,因為我添加了更多負載,以至於它在​​周四開始顯現,到週五,大多數讀數現在為零?

有人對這裡發生的事情有任何想法嗎?

核心版本3.16.7-ckt11-1+deb8u3。

相關內容