如何識別我的 Amazon EBS 磁碟區是否會發生微型爆量,然後防止這種情況發生?

2 分的閱讀內容
0

我具有Amazon Elastic Block Store (Amazon EBS) 磁碟區,該磁碟區未違反 Amazon CloudWatch 中其輸送量或 IOPS 限制。但是磁碟區顯示為限流狀態,並且發生高延遲問題和佇列長度。

簡短說明

CloudWatch 會每隔一分鐘收集樣本,以監控所有 Amazon EBS 磁碟區類型的 IOPS (op/s) 和輸送量 (byte/s)。

EBS 磁碟區爆量高 IOPS 或輸送時間比收集期間明顯更短時,即會發生微型爆量。由於磁碟區爆量高 IOPS 或輸送時間比收集期間更短,因此 CloudWatch 不會反映爆量情況。

**範例:**包含 950 佈建 IOPS 的 IO1 磁碟區 (一分鐘收集期間) 具有可推送 1,000 次 IOPS 持續五秒的應用程式。Amazon EBS 會在應用程式達到磁碟區 IOPS 限制時,進行限流。此時,磁碟區無法處理工作負載,導致佇列長度增加,延遲時間延長。

由於收集期間為 60 秒,CloudWatch 未顯示磁碟區已違反 IOPS 限制。1,000 次 IOPS 僅需 5 秒。一分鐘收集期間剩餘的 55 秒內,磁碟區會維持閒置狀態。這表示整整一分鐘內 VolumeReadOps+VolumeWriteOps 的數量是 5000 次作業 (1000*5 秒)。這相當於在一分鐘內 (5000/60 秒) 的平均值為 83.33 次 IOPS。這個平均值通常不是問題。
在此情況下,相同取樣時間的 VolumeIdleTime 為 55 秒,因為磁碟區會在收集期間的剩餘時間內處於閒置狀態。這表示在該取樣時間內,僅需五秒即可進行 5,000 次作業 (VolumeReadOps+VolumeWriteOps)。如果您將 5,000 除以 5 以計算平均 IOPS,則您會得到 1,000 次 IOPS。1,000 次 IOPS 是磁碟區的限制。

若要判斷磁碟區上是否發生微型爆量,請執行下列動作:

  1. 使用 CloudWatch 指標以識別可能的微型爆量。
  2. 使用 CloudWatch 以取得微型爆量事件。
  3. 使用作業系統層級工具,確認微型爆量。
  4. 透過變更磁碟區大小或類型以調整您的應用程式,預防微型爆量。

解決方法

使用 CloudWatch 指標以識別可能的微型爆量

  1. 檢查 VolumeIdleTime 指標。此指標會指出未提交讀取或寫入作業時,指定期間內的總秒數。如果 VolumeIdleTime 很高,則磁碟區在收集期間的大部分剩餘時間內會維持為閒置狀態。在相同取樣時間過高的 IOPS 或輸送量表示可能會發生微型爆量。
    輸送量的 VolumeIdleTime 指標包含 VolumeReadBytesVolumeWriteBytes 指標。
  2. 使用下列公式以計算磁碟區作用時達到的平均輸送量:
    預估平均輸送量 (Bytes/s) = (Sum(VolumeReadBytes) + Sum(VolumeWriteBytes) ) / (Period - Sum(VolumeIdleTime) )
    IOPS 的 VolumeIdleTime 指標包含 VolumeReadOpsVolumeWriteOps 指標。
  3. 使用下列公式以計算磁碟區作用時達到的平均 IOPS:
    預估平均 IOPS (Ops/s) = (Sum(VolumeReadOps) + Sum(VolumeWriteOps) ) / ( Period - Sum(VolumeIdleTime) )

使用 CloudWatch 以取得微型爆量事件

  1. 開啟 CloudWatch 主控台
  2. 選擇「所有指標」。
  3. 使用磁碟區 ID 以搜尋受影響的磁碟區。
  4. 若要檢視輸送量指標,請選擇「瀏覽」,然後新增 VolumeReadBytesVolumeWriteBytesVolumeIdleTime
  5. 選擇「圖形化指標」。
  6. 針對「統計資料」,選擇「總和」,然後針對「期間」,選擇「1 分鐘」。
  7. 針對「新增數學」,選擇「以空白表示式開始」。
  8. 在「表示式」的「詳細資料」中,輸入預估「平均輸送量 (Bytes/s)」公式的圖形 ID。例如,(m1+m2)/(60-m3)。

如果公式計算的值大於磁碟區的最大輸送量,則會發生微型爆量。若要查看 IOPS 指標,請遵循前述步驟,並對步驟 4 新增 VolumeReadOpsVolumeWriteOpsVolumeIdleTime

使用作業系統層級工具,確認微型爆量

前述公式並非一律即時識別微型爆量。這是因為即使 VolumeIdleTime 很低,磁碟區也可能會出現微型爆量。

**範例:**您的磁碟區達到違反磁碟區限制的層級。然後,磁碟區會降低至非常低的活動層級,而在收集期間的剩餘時間內未完全處於閒置狀態。即使發生微型爆量,VolumeIdleTime 指標也不會反映出低度活動。

若要確認微型爆量,請使用作業系統層級工具,該工具的精密度比 CloudWatch 更高。

Linux

使用 iostat 命令。如需詳細資訊,請參閱 Linux 手冊頁網站上的 iostat(1)

1.    若要以一秒精度報告所有已裝載磁碟區的 I/O 統計資料,請執行下列命令:

iostat -xdmzt 1

**注意事項:**iostat 工具是 sysstat 套件的一部分。如果您找不到 iostat 命令,則請執行下列命令,以在 Amazon Linux AMI 上安裝 sysstat:

$ sudo yum install sysstat -y

2.    若要判斷是否達到輸送量限制,請檢閱輸出中的 rMB/swMB/s。如果 rMB/s + wMB/s 大於磁碟區的最大輸送量,則會發生微型爆量。

若要判斷您是否達到 IOPS 限制,請檢閱輸出中的 r/sw/s。如果 r/s + w/s 大於磁碟區的最大 IOPS,則會發生微型爆量。

Windows

在 Windows 效能監視器中執行 perfmon 命令。如需詳細資訊,請參閱判斷 IOPS 和輸送量要求

變更磁碟區大小或類型以調整您的應用程式,防止微型爆量

將磁碟區變更為可調整所需 IOPS 和輸送量的類型和大小。如需磁碟區類型及其各自 IOPS 和輸送量限制的詳細資訊,請參閱 Amazon EBS 磁碟區類型執行個體可以推送至所有連接的 EBS 磁碟區的 IOPS/輸送量限制

最佳實務是根據工作負載,進行磁碟區基準效能測試,以驗證可以在測試環境中安全調整工作負載的磁碟區類型。如需詳細資訊,請參閱進行 EBS 磁碟區基準效能測試

AWS 官方
AWS 官方已更新 1 年前