我注意到一些雲託管解決方案的磁盤IO確實很差。這會導致一些問題,可以通過讓腳本等待直到磁盤不太忙來解決。我該如何檢查硬盤在PHP上的繁忙程度?
使用PHP可以監控文件系統的忙碌狀態(或不忙),而不會讓事情變得更糟?
我注意到一些雲託管解決方案的磁盤IO確實很差。這會導致一些問題,可以通過讓腳本等待直到磁盤不太忙來解決。我該如何檢查硬盤在PHP上的繁忙程度?
使用PHP可以監控文件系統的忙碌狀態(或不忙),而不會讓事情變得更糟?
如果這是一個Linux系統,您可以自己計算磁盤使用情況 - 您選擇實施它的語言將使用相同的概念。
您的內核很可能使用sysfs,這會在/sys
上提供大量有關您的系統的信息;我們可以定期獲取有關所需磁盤的信息,並根據它們之間的差異計算使用情況。
在我的系統上,我將查看磁盤,sda
,你可能會有所不同。
$ cat /sys/class/block/sda/stat
42632 25 2045318 247192 6956543 7362278 123236256 23878974 0 3703033 24119492
現在,如果我們看一下the Kernel documentation爲/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日程安排,diff的一些等待時間的運行,我們可以看到我們是多麼漫長的等待每個操作。您還將獲得有關總IOPS和RW帶寬的其他統計信息。這些文檔在每個領域更深入。
無論語言選擇,文件描述符打開,以獲取有關磁盤信息
/sys/class/block/<dev>/stat
如果我們做到這一點的時間表,我們可以得出看上圖)
這個答案非常好,我幾乎很抱歉沒有機會嘗試一下。然後我想起我有多幸福不再參與這個項目。 –
很抱歉重新發帖;在Meta上看到它,並且不得不分享我的圖表:D但是無論項目如何,圖形總是能夠識別問題的好東西!祝你好運! (我使用[Grafana](https:// grafana。com /))對不起,我沒有更快看到帖子! –
嘿,沒問題。你解決了我對如何處理這個問題的擔憂。現在很有用,這是一個勝利。 –
那麼,你當然可以啓動各種系統工具並評估他們的輸出以獲取任何信息,你也可以作爲一個人來繪製。不過,我懷疑這在你描述的場景中確實有幫助。 您在虛擬化系統中看到的「硬盤」僅被模擬。所以公用事業可能會顯示一些信息,但問題在於有多少真相。在這種情況下,性能不佳並不在系統硬件中(它無論如何都是虛擬的),但是在提供所有服務的整個網絡集羣內,這是您無法控制或預測的。 – arkascha
我想說,如果您遇到目前的解決方案問題,可以選擇更好的提供商或更好的優惠。不同提供商之間存在着巨大的差異。通常不太知名的提供商比知名公司提供更好的性能。 – arkascha
我應該補充一點,我已經不在這個項目上了(並且非常感謝)。該系統在硬盤讀取上存在不合理的延遲。緩存到HDD而不是數據庫實際上導致連接超時。這是我曾經工作過的最糟糕的平臺。我最終將配置變量存儲在數據庫中,因爲以這種方式獲得它們會更快。 –