Amazon MQ for RabbitMQ: 高メモリアラーム - Amazon MQ

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Amazon MQ for RabbitMQ: 高メモリアラーム

RabbitMQ は、ブローカーのメモリ使用量が CloudWatch メトリクス によって識別されRabbitMQMemUsed、 によって識別されるメモリ制限を超えると、高メモリアラームを生成しますRabbitMQMemLimitRabbitMQMemLimit は Amazon MQ によって設定され、各ホストインスタンスタイプで使用できるメモリを考慮して特別に調整されています。

高メモリアラームが発生した Amazon MQ for RabbitMQ ブローカーでは、メッセージを発行しているすべてのクライアントがブロックされます。メモリ使用率が高いために、ブローカーではアラームの診断および解決を困難にする他の問題が発生することがあります。

メモリ使用率が高いためにスタートアップを完了できない単一インスタンスブローカーは、再起動のループに入る可能性があり、その間はブローカーとのやり取りが制限されます。クラスターのデプロイでは、異なるノード上のレプリカ間でのメッセージの同期がキューで一時停止することがあります。キューで同期が一時停止すると、キューからのメッセージの消費が妨げられるため、メモリアラームを解決する際にはこれに個別に対処する必要があります。

Amazon MQ は、高いメモリアラームが発生しているブローカーを再起動せず、ブローカーがアラームを引き続き生成する限り、RebootBrokerAPIオペレーションの例外を返します。

このセクションの情報は、ブローカーで発生した RabbitMQ の高メモリアラームの診断と解決に役立ちます。

注記

RABBITMQ_MEMORY_ALARM ステータスがクリアされるまでに、必要なアクションを実行してから最大数時間かかる場合があります。

注記

ブローカーを mq.m5. インスタンスタイプから mq.t3.micro インスタンスタイプにダウングレードすることはできません。ダウングレードするには、ブローカーを削除し、新しいブローカーを作成する必要があります。

RabbitMQ ウェブコンソールを使用した高メモリアラームの診断

RabbitMQ ウェブコンソールでは、各ノードのメモリ使用率の詳細情報を生成して表示できます。この情報は、次の手順を実行することで確認できます。

  1. にサインイン AWS Management Console し、ブローカーの RabbitMQ ウェブコンソールを開きます。

  2. RabbitMQ コンソールの [Overview] (概要) ページで、[Nodes] (ノード) リストからノードの名前を選択します。

  3. ノードの詳細ページで、[Memory details] (メモリの詳細) を選択してセクションを展開し、ノードにおけるメモリ使用率の情報を表示します。

RabbitMQ がウェブコンソールで提供するメモリ使用率の情報は、メモリを消費しすぎている可能性や、高メモリアラームの原因となる可能性のあるリソースを特定するのに役立ちます。RabbitMQ ウェブコンソールで使用できるメモリ使用率の詳細については、RabbitMQ Server Documentation ウェブサイトの「Reasoning About Memory Use」を参照してください。

Amazon MQ メトリクスを使用した高メモリアラームの診断

Amazon MQ は、デフォルトでブローカーのメトリクスを有効にします。ブローカーメトリクスは、 コンソールにアクセスするか、 を使用して表示できます CloudWatch API。 CloudWatch 次のメトリクスは、RabbitMQ の高メモリアラームを診断する際に便利です。

Amazon MQ CloudWatch メトリクス メモリ使用量が多い理由
MessageCount メッセージは、消費または破棄されるまでメモリに格納されます。メッセージ数が多いと、リソースの過剰使用が表示され、高メモリアラームの原因となる可能性があります。
QueueCount また、キューはメモリに格納されます。キューの数が多いと高メモリアラームの原因となる可能性があります。
ConnectionCount クライアント接続にはメモリを使用するため、同時接続が多すぎると高メモリアラームの原因となる可能性があります。
ChannelCount 接続と同様に、各接続を使用して確立されたチャネルもノードメモリに格納されます。チャネルの数が多いと高メモリアラームの原因となる可能性があります。
ConsumerCount ブローカーに接続されているすべてのコンシューマーについて、設定された数のメッセージは、コンシューマーに配信される前にストレージからメモリにロードされます。コンシューマーの接続が多いと、メモリ使用率が高くなり、高メモリアラームの原因となる可能性があります。
PublishRate メッセージの発行には、ブローカーのメモリが使用されます。メッセージがブローカーに発行される速度が高すぎて、ブローカーがコンシューマーにメッセージを配信する速度を大幅に上回ると、ブローカーで高メモリアラームが発生する可能性があります。

高メモリアラームへの対応

特定したコントリビューターごとに、ブローカーの高メモリアラームを軽減して解決するため、次の一連のアクションをお勧めします。

メモリ使用量が多い理由 Amazon MQ の推奨
キュー内のメッセージ数が多すぎます。 次のいずれかを実行します。
  • キューに発行されたメッセージを消費します。

  • キューからメッセージをパージします。

  • ブローカーからキューを削除します。

ブローカーで設定されたキューの数が多すぎます。 キューの数を減らします。
ブローカーで確立された接続の数が多すぎます。 接続の数を減らします。詳細については、「接続およびチャネルの数の削減」を参照してください。
ブローカーで確立されたチャネルの数が多すぎます。 チャネルの数を減らします。詳細については、「接続およびチャネルの数の削減」を参照してください。
ブローカーに接続されたコンシューマーの数が多すぎます。 ブローカーに接続されたコンシューマーの数を減らします。
メッセージ発行速度が高すぎます。 パブリッシャーがメッセージをブローカーに発行する速度を低くします。 
クライアント接続試行速度が高すぎます。 メッセージを発行または消費できるようにクライアントがブローカーへの接続を試行する頻度を減らすか、ブローカーを設定します。

接続およびチャネルの数の削減

Amazon MQ for RabbitMQ ブローカーへの接続は、クライアントアプリケーションで終了できます。また、RabbitMQ ウェブコンソールを使用して手動で終了することもできます。RabbitMQ ウェブコンソールを使用して接続を終了するには、次の手順を実行します。

  1. にサインイン AWS Management Console し、ブローカーの RabbitMQ ウェブコンソールを開きます。

  2. RabbitMQ コンソールで、[Connections] (接続) タブを選択します。

  3. [Connections] (接続) ページの [All connections] (すべての接続) から、終了する接続の名前をリストから選択します。

  4. 接続の詳細ページで、[Close this connection] (この接続を終了する) を選択してセクションを展開し、[Force Close] (強制終了) を選択します。オプションで、理由のデフォルトのテキストをお客様自身の説明に置き換えることもできます。接続を終了すると、Amazon MQ for RabbitMQ により、指定した理由がクライアントに返されます。

  5. ダイアログボックスで [OK] を選択し、確認して接続を終了します。

接続を終了すると、終了した接続に関連付けられているすべてのチャネルも終了します。

注記

クライアントアプリケーションは、終了後にブローカーが自動的に接続を再確立するように設定されている場合があります。この場合、接続またはチャネルの数を減らすには、ブローカーのウェブコンソールからの接続を終了するだけでは不十分です。

パブリックアクセスのないブローカーの場合、接続5671用のポートなど、適切なメッセージプロトコルポートのインバウンドトラフィックを拒否することで、AMQP接続を一時的にブロックできます。ブローカーの作成時に Amazon MQ に指定したセキュリティグループのポートをブロックできます。セキュリティグループの変更の詳細については、「Amazon VPCユーザーガイド」の「セキュリティグループにルールを追加する」を参照してください。

クラスターのデプロイで一時停止したキューの同期への対応

RabbitMQ の高メモリアラームに対処しているときに、1 つまたは複数のキューのメッセージを消費できないことがあります。これらのキューは、ノード間でメッセージを同期中である可能性があります。その間、それぞれのキューは、メッセージの発行および消費に使用できなくなります。高メモリアラームが原因でキューの同期が一時停止し、メモリアラームの原因になることさえあります。

一時停止したキューの同期の停止と再試行の詳細については、「RabbitMQ の一時停止されたキュー同期の解決」を参照してください。

単一インスタンスブローカーでの再起動ループへの対応

高メモリアラームを発生させる Amazon MQ for RabbitMQ の単一インスタンスブローカーは、再起動時に起動するための十分なメモリがない場合、利用できなくなる可能性があります。これにより、RabbitMQ が再起動のループに入り、問題が解決するまでブローカーとのやり取りが妨げられる可能性があります。ブローカーが再起動のループ状態にある場合、このセクションで前述した Amazon MQ で推奨されるアクションを適用して、高メモリアラームを解決することはできません。

ブローカーを回復させるには、より多くのメモリを持つ大きなインスタンスタイプにアップグレードすることをお勧めします。クラスターのデプロイとは異なり、再起動中にノード間で実行するキューの同期がないため、高メモリアラームの発生時に単一インスタンスブローカーをアップグレードできます。

高メモリアラームの防止

特定する要因ごとに、RabbitMQ の高メモリアラームの発生を防止および低減するため、次の一連のアクションを推奨します。

メモリ使用量が多い理由 Amazon MQ の推奨
キュー内のメッセージ数が多すぎます。 以下の操作を実行します。
ブローカーで設定されたキューの数が多すぎます。 設定を行うか、キューの数の制限を減らします。
ブローカーで確立された接続の数が多すぎます。 設定を行うか、接続の数の制限を減らします。
ブローカーで確立されたチャネルの数が多すぎます。 クライアントアプリケーションで、接続あたりのチャネルの最大数を設定します。
ブローカーに接続されたコンシューマーの数が多すぎます。 小さいコンシューマーのプリフェッチの制限を設定します。
クライアント接続試行速度が高すぎます。 より長時間の接続を使用して、接続の試行回数と頻度を減らします。

ブローカーのメモリアラームが解決したら、ホストインスタンスタイプを追加のリソースを含むインスタンスにアップグレードできます。ブローカーのインスタンスタイプを更新する方法については、Amazon MQ RESTAPIリファレンスUpdateBrokerInput」の「」を参照してください。

ブローカーのインスタンスタイプの一覧については、「Amazon MQ for RabbitMQ インスタンスタイプ」を参照してください。