Amazon MQ for RabbitMQ: 高メモリアラーム
Amazon MQ for RabbitMQ は、CloudWatch メトリクス RabbitMQMemUsed によって識別されるブローカーのメモリ使用量が、RabbitMQMemLimit によって識別されるメモリ制限を超えると、高メモリアラームを生成します。
高メモリアラームが発生した RabbitMQ ブローカーでは、メッセージを発行しているすべてのクライアントがブロックされます。ブローカーが再起動ループに入ったり、キューの同期が一時停止されたり、アラームの診断と解決を複雑にするその他の問題が発生したりすることがあります。
高メモリアラームを診断して解決するには、まず RabbitMQ のすべてのベストプラクティスに従い、次のステップを実行します。
重要
-
RabbitMQMemLimitは Amazon MQ によって設定され、ホストインスタンスタイプごとに使用可能なメモリを考慮して特別に調整されます。 -
Amazon MQ では、高メモリアラームが発生しているブローカーの再起動は行われません。また、ブローカーでアラームが発生し続ける限り
RebootBrokerAPI オペレーションに対して例外が返されます。
ステップ 1: 高メモリアラームを診断する
Amazon MQ for RabbitMQ ブローカーで高メモリアラームを診断するには、2 つの方法があります。CloudWatch で RabbitMQ ウェブコンソールと Amazon MQ メトリクスの両方をチェックすることをお勧めします。
RabbitMQ ウェブコンソールを使用した高メモリアラームの診断
RabbitMQ ウェブコンソールでは、各ノードのメモリ使用率の詳細情報を生成して表示できます。この情報は、次の手順を実行することで確認できます。
-
AWS マネジメントコンソール にサインインし、ブローカーの RabbitMQ ウェブコンソールを開きます。
-
RabbitMQ コンソールの [Overview] (概要) ページで、[Nodes] (ノード) リストからノードの名前を選択します。
-
ノードの詳細ページで、[Memory details] (メモリの詳細) を選択してセクションを展開し、ノードにおけるメモリ使用率の情報を表示します。
RabbitMQ がウェブコンソールで提供するメモリ使用率の情報は、メモリを消費しすぎている可能性や、高メモリアラームの原因となる可能性のあるリソースを特定するのに役立ちます。RabbitMQ ウェブコンソールで使用できるメモリ使用率の詳細については、RabbitMQ Server Documentation ウェブサイトの「Reasoning About Memory Use
Amazon MQ メトリクスを使用した高メモリアラームの診断
Amazon MQ は、デフォルトでブローカーのメトリクスを有効にします。CloudWatch コンソールにアクセスするか、CloudWatch API を使用して、ブローカーのメトリクスを表示できます。次のメトリクスは、RabbitMQ の高メモリアラームを診断する際に便利です。
| Amazon MQ CloudWatch メトリクス | メモリ使用量が多い理由 |
|---|---|
MessageCount |
メッセージは、消費または破棄されるまでメモリに格納されます。メッセージ数が多いと、リソースの過剰使用が表示され、高メモリアラームの原因となる可能性があります。 |
QueueCount |
また、キューはメモリに格納されます。キューの数が多いと高メモリアラームの原因となる可能性があります。 |
ConnectionCount |
クライアント接続にはメモリを使用するため、同時接続が多すぎると高メモリアラームの原因となる可能性があります。 |
ChannelCount |
接続と同様に、各接続を使用して確立されたチャネルもノードメモリに格納されます。チャネルの数が多いと高メモリアラームの原因となる可能性があります。 |
ConsumerCount |
ブローカーに接続されているすべてのコンシューマーについて、設定された数のメッセージは、コンシューマーに配信される前にストレージからメモリにロードされます。コンシューマーの接続が多いと、メモリ使用率が高くなり、高メモリアラームの原因となる可能性があります。 |
PublishRate |
メッセージの発行には、ブローカーのメモリが使用されます。メッセージがブローカーに発行される速度が高すぎて、ブローカーがコンシューマーにメッセージを配信する速度を大幅に上回ると、ブローカーで高メモリアラームが発生する可能性があります。 |
ステップ 2: 高メモリアラームに対処して防止する
注記
必要なアクションを実行した後、RABBITMQ_MEMORY_ALARM ステータスがクリアされるまでに数時間かかる場合があります。
一般的な防止方法として、RabbitMQ のすべてのベストプラクティスに従ってください。特定したコントリビューターごとに、RabbitMQ の高メモリアラームに防止して対処するため、次の一連のアクションをお勧めします。
| メモリ使用量が多い原因 | 対応に関する Amazon MQ の推奨事項 | 防止のための Amazon MQ の推奨事項 |
|---|---|---|
| メッセージの数 | キューに発行されたメッセージの消費、キューからのメッセージの消去、またはブローカーからのキューの削除。 | レイジーキューを有効にし、キューの深度制限を設定または削減します。 |
| キューの数 | キューの数を減らします。 | キューの数の制限を設定するか、減らします。 |
| 接続の数 | 接続の数を減らします。 | 接続の数の制限を設定するか、減らします。 |
| チャンネルの数 | チャネルの数を減らします。 | クライアントアプリケーションで、接続あたりのチャネルの最大数を設定します。 |
| コンシューマー数 | ブローカーに接続されたコンシューマーの数を減らします。 | 小さいコンシューマーのプリフェッチの制限を設定します。 |
| メッセージの発行速度 | パブリッシャーがメッセージをブローカーに発行する速度を低くします。 | パブリッシャーの確認を有効にします。 |
| クライアント接続試行レート | メッセージを発行または消費できるようにクライアントがブローカーへの接続を試行する頻度を減らすか、ブローカーを設定します。 | より長時間の接続を使用して、接続の試行回数と頻度を減らします。 |
ブローカーのメモリアラームが解決したら、ホストインスタンスタイプを追加のリソースを含むインスタンスにアップグレードできます。ブローカーのインスタンスタイプを更新する方法については、「Amazon MQ REST API リファレンス」の「UpdateBrokerInput」を参照してください。
注記
ブローカーを mq.m5.x インスタンスタイプから mq.t3.micro インスタンスタイプにダウングレードすることはできません。ダウングレードするには、ブローカーを削除し、新しいブローカーを作成する必要があります。