2016-08-01 28 views
8

我注意到一些雲託管解決方案的磁盤IO確實很差。這會導致一些問題,可以通過讓腳本等待直到磁盤不太忙來解決。我該如何檢查硬盤在PHP上的繁忙程度?

使用PHP可以監控文件系統的忙碌狀態(或不忙),而不會讓事情變得更糟?

+1

那麼,你當然可以啓動各種系統工具並評估他們的輸出以獲取任何信息,你也可以作爲一個人來繪製。不過,我懷疑這在你描述的場景中確實有幫助。 您在虛擬化系統中看到的「硬盤」僅被模擬。所以公用事業可能會顯示一些信息,但問題在於有多少真相。在這種情況下,性能不佳並不在系統硬件中(它無論如何都是虛擬的),但是在提供所有服務的整個網絡集羣內,這是您無法控制或預測的。 – arkascha

+1

我想說,如果您遇到目前的解決方案問題,可以選擇更好的提供商或更好的優惠。不同提供商之間存在着巨大的差異。通常不太知名的提供商比知名公司提供更好的性能。 – arkascha

+0

我應該補充一點,我已經不在這個項目上了(並且非常感謝)。該系統在硬盤讀取上存在不合理的延遲。緩存到HDD而不是數據庫實際上導致連接超時。這是我曾經工作過的最糟糕的平臺。我最終將配置變量存儲在數據庫中,因爲以這種方式獲得它們會更快。 –

回答

17

如果這是一個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 

如果我們做到這一點的時間表,我們可以得出看上圖)

enter image description here

+7

這個答案非常好,我幾乎很抱歉沒有機會嘗試一下。然後我想起我有多幸福不再參與這個項目。 –

+3

很抱歉重新發帖;在Meta上看到它,並且不得不分享我的圖表:D但是無論項目如何,圖形總是能夠識別問題的好東西!祝你好運! (我使用[Grafana](https:// grafana。com /))對不起,我沒有更快看到帖子! –

+2

嘿,沒問題。你解決了我對如何處理這個問題的擔憂。現在很有用,這是一個勝利。 –

相關問題