我無法向我的Amazon MQ for ActiveMQ 代理程式傳送訊息。在 Amazon CloudWatch 中檢閱代理程式的日誌時,我看到「持久性存放區已滿」錯誤。是什麼原因引發此錯誤,如何疑難排解問題?
簡短描述
當代理程式達到其儲存限制時,Amazon MQ for ActiveMQ 將持久性存放區已滿錯誤傳回 CloudWatch。當 Amazon MQ for ActiveMQ 達到其其儲存限制時,該代理程式將無法接收訊息。
要解決持久性存放區已滿錯誤,首先透過檢閱代理程式的以下 CloudWatch 指標來確認錯誤的原因:
- 存放區用量百分比
- 用於完全復原的日記帳檔案
- 用於快速復原的日記帳檔案
然後,根據代理程式的指標,按需減少儲存到代理程式持久性儲存中的資料量。
若要協助防止錯誤再次發生,請參閲本文的防止「持久性存放區已滿」錯誤的最佳實務部分。有關詳細資訊,請參閲 Apache ActiveMQ 文件中的 AMQ 訊息存放區和生產者流程控制。
針對 Amazon MQ for ActiveMQ 的範例 CloudWatch「持久性存放區已滿」錯誤訊息
INFO | Usage(default:store:queue://broker.name:store) percentUsage=99%, usage=537210471, limit=536870912, percentUsageMinDelta=1%;Parent:Usage(default:store) percentUsage=100%, usage=537210471, limit=536870912,percentUsageMinDelta=1%: Persistent store is Full, 100% of 536870912. Stopping producer (ID:xxxx) to prevent flooding queue://broker.name. See http://activemq.apache.org/producer-flow-control.html for more info (blocking for: 155s)
解決方案
確認錯誤原因
1. 開啟 CloudWatch 主控台。
**重要提示:**請確保登入代理程式所在的相同 AWS 區域。
2. 在左側導覽窗格中,選擇指標。然後,選擇所有指標。此時將開啟 CloudWatch 指標頁面。
3. 在指標頁面上,選擇 Amazon MQ。然後,選擇代理程式指標。
4. 在搜尋框中,輸入您的代理程式名稱。然後,按鍵盤上的 Enter 鍵。這將顯示您在搜尋框中輸入的代理程式的所有 CloudWatch 指標。
5. 檢閱存放區用量百分比指標值。如果代理程式的存放區用量百分比指標達到 100,則代理程式會停止接收訊息並傳回持久性存放區已滿錯誤。
6. 如果代理程式的存放區用量百分比指標為 100 (或接近 100),請檢閱以下指標值以確定原因:
- 用於完全復原的日記帳檔案 — 指示在正常關閉後重播的日誌檔案數。此指標的增加指示代理程式的取用者執行速度較慢,或者持久性儲存中的待處理訊息太多。
- 用於快速復原的日記帳檔案 — 指示在非正常關閉後重播的日誌檔案數。此指標值的增加指示持久性儲存中的待處理訊息太多。
**注意:**ActiveMQ KahaDB 日記帳日誌檔案 (資料檔案) 可以由於以下任何原因保留在持久性儲存中:
- 資料檔案包含耐久主題訂閲或目的地的待處理訊息。
- 針對正在使用的資料檔案中的訊息,資料檔案包括單獨的確認 (ACK)。
- 該資料檔案參考待處理的交易。
- 該資料檔案是一個日記帳檔案,並且存在待處理的寫入動作。
有關詳細資訊,請參閲 ActiveMQ 文件中的為什麼 KahaDB 日誌檔案在清理後會保留。
減少儲存到 Amazon MQ for ActiveMQ 代理程式的持久性儲存中的資料量
取用或刪除代理程式的佇列和耐久主題中的待處理訊息
有關説明,請參閲 Apache ActiveMQ 文件中的如何清除佇列。
**注意:**Amazon MQ for ActiveMQ 目前不支援 Java 管理擴展 (JMX)。必須使用 ActiveMQ Web 主控台清除代理程式的佇列和耐久主題。
取用或刪除代理程式的死信佇列 (DLQ) 中的過期訊息
有關説明,請參閲 Apache ActiveMQ 文件中訊息重新交付和 DLQ 處理的自動捨棄過期訊息部分。
**注意:**要在代理程式的 DLQ 中取用訊息,首先要將 DLQ 設定為常規佇列。然後,將您的取用者設定為直接輪詢 DLQ。
防止出現「持久性存放區已滿」錯誤的最佳實務
驗證您是否為使用案例選擇正確的代理程式執行個體類型
有關更多資訊,請參閲 Amazon MQ 開發人員指南中的選擇正確的代理程式執行個體類型以取得最佳輸送量。
**注意:**根據您的使用案例,將取用者新增至您的代理程式有時可有助於代理程式的訊息輸送量。
增加正在使用的取用者的數量和速度
在持久模式下使用 ActiveMQ 時,通常會在取用者太少或取用者執行緩慢時發生儲存的寫入。增加正在使用的取用者數量和速度有助於減少代理程式寫入持久性儲存的資料量。
根據代理程式的「存放區用量百分比」指標設定 CloudWatch 警示
如果代理程式的存放區用量百分比指標達到 100 (或接近 100),則代理程式將停止接收訊息。要讓 CloudWatch 在此指標達到特定閾值時提醒您,可以在 CloudWatch 中設定警示。然後,可以在出現錯誤之前採取本文中描述的預防性動作。
如需指示,請參閱 CloudWatch 使用者指南中的根據靜態閾值建立 CloudWatch 警示。
相關資訊
確保卓越的 Amazon MQ 效能
記錄和監控 Amazon MQ for ActiveMQ 代理程式