Amazon MQ for ActiveMQ の「永続ストアがいっぱいです」エラーのトラブルシューティング方法を教えてください。

最終更新日: 2022 年 4 月 19 日

Amazon MQ for ActiveMQ ブローカーにメッセージを送信できません。Amazon CloudWatch でブローカーのログを確認すると、「Persistent store is Full」(永続ストアがいっぱいです) というエラーがあります。エラーの原因と問題のトラブルシューティング方法を教えてください。

簡単な説明

ブローカーがストレージ制限に達すると、Amazon MQ for ActiveMQ は、CloudWatch に「Persistent store is Full」というエラーを返します。Amazon MQ for ActiveMQ ブローカーがストレージ制限に達すると、ブローカーはメッセージを受信できなくなります。

Persistent store is Full エラーを解決するには、まず、以下に示すブローカーの CloudWatch メトリクスでエラーの原因を確認します。

  • Store Percentage Usage
  • Journal Files for Full Recovery
  • Journal Files for Fast Recovery

次に、ブローカーのメトリクスに基づいて、必要に応じて、ブローカーの永続的ストレージに保存されるデータ量を減らします。

このエラーの再発を防止するには、この記事の「"Persistent store is Full" エラーを防止するためのベストプラクティス」セクションを参照してください。詳細については、Apache ActiveMQ ドキュメントの「AMQ Message Store」と「Producer Flow Control」を参照してください。

Amazon MQ for ActiveMQ ブローカーの CloudWatch の "Persistent store is Full" エラーメッセージの例

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.    [Store Percentage Usage] メトリクス値を確認します。ブローカーの Store Percentage Usage メトリクスが 100 に達すると、ブローカーはメッセージの受信を停止し、Persistent store is Full エラーを返します。

6.    ブローカーの Store Percentage Usage メトリクスが 100 (または 100 に近い値) の場合は、次のメトリクスの値を確認して原因を特定します。

  • Journal Files for Full Recovery—クリーンシャットダウン後に再生されるジャーナルファイルの数を示します。このメトリクスの増加は、ブローカーのコンシューマーの動作が遅いか、永続的ストレージに保留中のメッセージが多すぎることを示します。
  • Journal Files for Fast Recovery—クリーンでないシャットダウン後に再生されるジャーナルファイルの数を示します。このメトリクスの増加は、永続的ストレージに保留中のメッセージが多すぎることを示します。

注意: ActiveMQ KahaDB ジャーナルログファイル (データファイル) は、次のいずれかの理由で永続的ストレージに残ることがあります。

  • データファイルには、永続的なトピックのサブスクリプションまたは宛先に対する保留中のメッセージが含まれています。
  • データファイルには、使用中のデータファイルにあるメッセージに対する個々の確認 (ACK) が含まれています。
  • データファイルは保留中のトランザクションを参照します。
  • データファイルはジャーナルファイルで、それに対する保留中の書き込みアクションがあります。

詳細については、ActiveMQ ドキュメントの「Why do KahaDB log files remain after cleanup」(クリーンアップ後に KahaDB ログファイルが残るのはなぜですか) を参照してください。

Amazon MQ for ActiveMQ ブローカーの永続的ストレージに保存されるデータの量を減らすには

ブローカーのキューと永続的トピックにある保留中のメッセージを消費または削除する

手順については、Apache ActiveMQ ドキュメントの「How do I purge a queue」を参照してください。

注意: 現在、Amazon MQ for ActiveMQ は、Java 管理拡張機能 (JMX) をサポートしていません。ブローカーのキューと永続的トピックをパージするには、ActiveMQ ウェブコンソールを使用する必要があります。

ブローカーのデッドレターキュー (DLQ) にある期限切れメッセージを消費または削除する

手順については、Apache ActiveMQ ドキュメントの「Message redelivery and DLQ handling」の「Automatically discard expired messages」を参照してください。

注意: ブローカーの DLQ でメッセージを消費するには、まず DLQ を通常のキューとして設定します。次に、DLQ を直接ポーリングするようにコンシューマーを設定します。

"Persistent store is Full" エラーを防止するためのベストプラクティス

ユースケースに適したブローカーインスタンスタイプが選択されていることを確認する

詳細については、Amazon MQ 開発者ガイドの「最良なスループットのために正しいブローカーインスタンスタイプを選択する」を参照してください。

注意: ユースケースによっては、ブローカーにコンシューマーを追加するとブローカーのメッセージスループットが向上する場合があります。

利用しているコンシューマーの数を増やしてスピードを上げる

ActiveMQ を永続モードで使用する場合、通常、コンシューマーが少なすぎるか、コンシューマーが遅い場合に、ストレージへの書き込みが発生します。使用しているコンシューマーの数を増やして速度を上げると、ブローカーが永続的ストレージに書き込むデータ量を削減できます。

ブローカーの「Store Percentage Usage」メトリクスに基づいて CloudWatch アラームを設定する

ブローカーの Store Percentage Usage (ストア使用率) メトリクスが 100 (または 100 に近い値) に達すると、ブローカーはメッセージの受信を停止します。このメトリクスが特定のしきい値に達したときに CloudWatch がアラートを発するようにするには、CloudWatch でアラームを設定します。その後、エラーが発生する前に、この記事で説明されている予防措置を講じることができます。

手順については、CloudWatch ユーザーガイドの「静的しきい値に基づいて CloudWatch アラームを作成する」を参照してください。


この記事はお役に立ちましたか?


請求に関するサポートまたは技術サポートが必要ですか?