17

私はちょうどRabbitMQの設定の詳細を調べていて、出くわしました

[{rabbit, [{vm_memory_high_watermark, 0}, 
           {disk_free_limit, {mem_relative, 1.0}}
          ]
}]

この構成はどういう意味ですか?

vm_memory_high_watermark=> 0 に設定すると、rabbitmq アプリの起動直後にすべてのパブリッシャーがブロックされますか? しかし、rabbitmq は送信したメッセージをキューに入れることができます。

16720 rabbitmq  20   0  142m  62m 2408 S    0  **1.6**   0:06.88 beam.smp

ブローカにメッセージを送信するたびに、このプロセスのメモリ使用量が増加していることがわかります。では、透かしが 0 に設定されているにもかかわらず、メッセージがメモリ内にあるということですか?

RAM のメモリ制限に達してもメッセージが送信され続けるとどうなるか知りたいです。どちらかのパブリッシャーがブロックされていますか? または可能であれば、メッセージはディスクにスワップアウトされますか?

4

1 に答える 1

18

vm_memory_high_watermark は、RabbitMQ のメモリ フロー制御に関連するパーセンテージ値です。

メモリフロー制御を見ると、「メモリベースのフロー制御」という見出しの下に次のように表示されます。

RabbitMQ サーバーは、起動時と rabbitmqctl set_vm_memory_high_watermark fraction の実行時に、コンピューターにインストールされている RAM の合計量を検出します。デフォルトでは、RabbitMQ サーバーがインストールされた RAM の 40% を超えて使用すると、メモリ アラームが発生し、すべての接続がブロックされます。メモリ アラームがクリアされると (たとえば、サーバーがメッセージをディスクにページングしたり、クライアントに配信したりしたため)、通常のサービスが再開されます。

したがって、この値を 0 に設定すると、もちろんすぐにトリガーされます。RabbitMQ がより多くのメモリを使用できるようにする場合は、値を増やします。

もう 1 つの重要な注意事項:

デフォルトのメモリしきい値は、インストールされている RAM の 40% に設定されています。これは、RabbitMQ サーバーが 40% を超えて使用することを妨げるものではないことに注意してください。これは、パブリッシャーが抑制されるポイントにすぎません。

そのため、アラームが発生したときにメッセージを公開しようとすると、パブリッシャーはメッセージの送信をブロックされます。

すべてのパブリッシャーをブロックする場合は、vm_memory_high_watermark を 0 に設定します。メモリ ベースのフロー制御を「無効」にする場合は、vm_memory_high_watermark を 100 に設定します。上記のリンクから詳細を参照してください。

値 0 を指定すると、メモリ アラームがすぐにオフになり、すべての公開が無効になります (これは、公開をグローバルに無効にしたい場合に役立ちます。rabbitmqctl set_vm_memory_high_watermark 0 を使用してください)。メモリ アラームがまったく鳴らないようにするには、100 などの高い乗数を設定します。

于 2012-08-29T10:48:55.563 に答える