我的 Amazon Elastic Block Store (Amazon EBS) 磁碟區在 Amazon CloudWatch 中的平均輸送量或平均每秒讀寫次數 (IOPS) 未達到配額上限。不過,磁碟區仍發生限流,而且延遲和佇列長度都很高。
解決方法
CloudWatch 指標預設以 1 分鐘間隔收集樣本。不過,I/O 操作以毫秒頻率發生。當磁碟區的 IOPS 或輸送量高載持續時間短於收集間隔時,CloudWatch 不會擷取該次高載。若要判斷磁碟區是否在 1 分鐘內發生效能高載,請執行以下操作。
使用 CloudWatch 指標識別微高載
檢查 VolumeIOPSExceededCheck 和 VolumeThroughputExceededCheck 指標
VolumeIOPSExceededCheck 和 VolumeThroughputExceededCheck 指標會指出 IOPS 或輸送量何時超過磁碟區的佈建效能。這些指標會顯示每分鐘內任一時間點的 IOPS 和輸送量,並以 1 分鐘精細度提供彙總訊號。如果這些指標的值為 1,表示工作負載正在發生微高載。
檢查 VolumeIdleTime 指標
VolumeIdleTime 指標圖表會顯示指定期間內未提交讀取或寫入操作的秒數。如果 VolumeIdleTime 很高,表示磁碟區在該期間的大部分時間都處於閒置狀態。如果同一期間內出現高 IOPS 或高輸送量,表示磁碟區發生微高載。
計算 EBS 磁碟區接收的平均輸送量和平均 IOPS
使用以下公式計算 EBS 磁碟區的平均輸送量:
估計平均輸送量 = ( Sum(VolumeReadBytes) + Sum(VolumeWriteBytes) ) / CEIL(Period - Sum(VolumeIdleTime))
使用以下公式計算 EBS 磁碟區的平均 IOPS:
估計平均 IOPS = ( Sum(VolumeReadOps) + Sum(VolumeWriteOps) ) / CEIL(Period - Sum(VolumeIdleTime))
使用 CEIL 函數,避免計算中出現邊界案例。上述公式適用於 VolumeIdleTime 接近期間長度的情境。CEIL 可確保接近零的值不會改變結果。如需更多資訊,請參閱指標數學運算支援的函數。
如果平均輸送量或 IOPS 大於磁碟區的輸送量或 IOPS 上限,表示工作負載發生微高載。
使用 Amazon EBS 詳細效能統計資料識別微高載
使用磁碟區的詳細效能統計資料。統計資料會顯示工作負載嘗試使 IOPS 或輸送量高於磁碟區佈建效能配額的微秒數。EBS 僅會在磁碟區連接至 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體期間保留統計資料。若要使用統計資料檢查微高載的根本原因,EBS 必須已擷取相關資料。
若要存取統計資料,請參閱存取統計資料。
使用作業系統層級工具識別微高載
即使 VolumeIdleTime 很低,EBS 磁碟區仍可能發生微高載。對於 VolumeIdleTime 較低的磁碟區,請使用能以精細間隔收集樣本的作業系統 (OS) 工具,判斷工作負載是否發生微高載。
Linux
若要以 1 秒精細度報告所有已掛載磁碟區的 I/O 統計資料,請執行 iostat 命令:
iostat -xdmzt 1
iostat 工具屬於 sysstat 套件。如果找不到 iostat 命令,請執行以下命令,在 Amazon Linux Amazon Machine Image (AMI) 上安裝 sysstat:
sudo yum install sysstat -y
如需更多資訊,請參閱 Linux man 網站上的 iostat。
若要判斷是否達到輸送量配額,請檢閱輸出中的 rMBps 和 wMBps。如果 rMBps + wMBps 大於磁碟區的輸送量上限,表示磁碟區發生微高載。
若要判斷是否達到 IOPS 配額,請檢閱輸出中的 rps 和 wps。如果 rps + wps 大於磁碟區的 IOPS 上限,表示磁碟區發生微高載。
Windows
在 Windows 效能監視器中執行 perfmon 命令。
調整磁碟區大小或類型,以符合應用程式需求並防止微高載
微高載可能導致應用程式發生 I/O 限流或 I/O 延遲。若要避免此問題,請將磁碟區修改為適當的類型和大小,確保即使在微高載水準下也能滿足所需的 IOPS 和輸送量。
執行個體可向所有連接的 EBS 磁碟區推送的 IOPS 和輸送量皆有上限。如需更多資訊,請參閱 Amazon EBS 最佳化執行個體類型。
最佳實務是對磁碟區進行基準測試,並以工作負載為測試基準,藉此判斷哪些磁碟區類型能在測試環境中安全地滿足工作負載需求。