在亞馬遜網路服務我正在使用一個t2.small
EC2實例作為 VPS,在 LAMP (PHP) 堆疊上為一些網站提供服務。我剛剛收到一張帳單,幾乎是我平常帳單的三倍。我看到我的I/O 請求使用率異常高。我登入伺服器並發現磁碟已滿。我已經刪除了一堆非關鍵檔案和日誌,磁碟 (EBS) 現在的容量小於 60%,但我想檢查兩件事。
- 如何判斷大量 I/O 請求是否是由於磁碟已滿所致?
- 如何判斷 I/O 請求是否仍在消耗?
我沒有特定於 AWS 的雲觀察啟用了監控服務,所以我可能不會得到#1 的答案,但任何建議將不勝感激。
關於#2,我使用了中提到的兩種方法這篇博文來確定我的 I/O 速率,看起來非常非常高。以下是來自伺服器的一些統計數據:
$ iostat
Linux 3.13.0-45-generic (dysphoria) 2015-10-08 _x86_64_ (1 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
2.74 0.01 0.69 16.83 0.43 79.30
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
xvda 170.08 10039.29 32.52 843300857 2731428
xvdf 0.01 0.02 0.00 1308 0
$ cat /proc/diskstats
1 0 ram0 0 0 0 0 0 0 0 0 0 0 0
1 1 ram1 0 0 0 0 0 0 0 0 0 0 0
1 2 ram2 0 0 0 0 0 0 0 0 0 0 0
1 3 ram3 0 0 0 0 0 0 0 0 0 0 0
1 4 ram4 0 0 0 0 0 0 0 0 0 0 0
1 5 ram5 0 0 0 0 0 0 0 0 0 0 0
1 6 ram6 0 0 0 0 0 0 0 0 0 0 0
1 7 ram7 0 0 0 0 0 0 0 0 0 0 0
1 8 ram8 0 0 0 0 0 0 0 0 0 0 0
1 9 ram9 0 0 0 0 0 0 0 0 0 0 0
1 10 ram10 0 0 0 0 0 0 0 0 0 0 0
1 11 ram11 0 0 0 0 0 0 0 0 0 0 0
1 12 ram12 0 0 0 0 0 0 0 0 0 0 0
1 13 ram13 0 0 0 0 0 0 0 0 0 0 0
1 14 ram14 0 0 0 0 0 0 0 0 0 0 0
1 15 ram15 0 0 0 0 0 0 0 0 0 0 0
7 0 loop0 0 0 0 0 0 0 0 0 0 0 0
7 1 loop1 0 0 0 0 0 0 0 0 0 0 0
7 2 loop2 0 0 0 0 0 0 0 0 0 0 0
7 3 loop3 0 0 0 0 0 0 0 0 0 0 0
7 4 loop4 0 0 0 0 0 0 0 0 0 0 0
7 5 loop5 0 0 0 0 0 0 0 0 0 0 0
7 6 loop6 0 0 0 0 0 0 0 0 0 0 0
7 7 loop7 0 0 0 0 0 0 0 0 0 0 0
202 0 xvda 14198708 1225 1686588426 26715600 87579 51756 5461696 11290600 0 16654328 38003076
202 1 xvda1 14198527 1203 1686586802 26715376 87579 51756 5461696 11290600 0 16654236 38002848
202 80 xvdf 447 6 2616 288 0 0 0 0 0 288 288
$ free -m
total used free shared buffers cached
Mem: 2000 1910 89 6 6 1216
-/+ buffers/cache: 688 1312
Swap: 0 0 0
儘管上述資訊是在啟動後不久獲取的,但iostat
報告顯示,即使系統運行了幾個小時後,初始 TPS 也在 50-80 範圍內。該伺服器為大約 20 個網站提供服務,其中只有 3 個網站每天的點擊量超過幾次。每天約有數百名遊客。伺服器和網站多年來一直保持這種配置,沒有出現任何問題。直到最近,I/O 才開始激增,而程式碼、伺服器配置或網站負載沒有相應的變化。
請注意,這個問題最初是在亞馬遜網路服務官方論壇然而似乎沒有人能夠提供幫助。也許這個問題對於該論壇來說太籠統了。
答案1
iostat 手冊頁中有重要訊息,如果不理解這些信息,可能會導致對所提供數據的誤解。
iostat 命令產生的第一份報告提供了有關係統啟動以來的時間的統計資訊。每個後續報告都涵蓋自上一個報告以來的時間。每次執行 iostat 命令時都會報告所有統計資料。
因此,上面的簡單 iostat 正在報告自系統啟動以來收集的值。
更正常的是按一定時間間隔運行 iostst 並丟棄第一組統計數據,例如
iostat 5
這將每 5 秒報告一次相關統計數據。
一旦收集到正確的數據,您將能夠更好地了解情況。
看看在頂上命令。特別是使用特權運行它並選擇d
將啟用每個執行緒的磁碟 io 統計資料。