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のメモリ制限に達してもメッセージが送信されている場合はどうなるのか知りたいのですが。どちらの発行者もブロックされていますか?またはメッセージが利用可能な場合、ディスクにスワップアウトされますか?
Vm_memory_high_watermarkは、RabbitMQのメモリフロー制御に関連するパーセンテージ値です。
メモリフロー制御 を見ると、「メモリベースのフロー制御」の見出しの下に次のように表示されていることがわかります。
RabbitMQサーバーは、起動時およびrabbitmqctl set_vm_memory_high_watermarkフラクションが実行されたときに、コンピューターにインストールされているRAMの合計量を検出します。メモリアラームが発生し、すべての接続がブロックされます。メモリアラームがクリアされると(たとえば、サーバーがメッセージをディスクにページングしたり、クライアントに配信したりしたため)、通常のサービスが再開されます。
したがって、この値を0に設定すると、もちろんすぐにトリガーされます。 RabbitMQがより多くのメモリを使用できるようにする場合は、値を増やす必要があります。
もう1つの重要な注意:
デフォルトのメモリしきい値は、インストールされているRAMの40%に設定されています。これは、RabbitMQサーバーが40%を超えて使用することを妨げるものではなく、パブリッシャーが抑制されるポイントにすぎないことに注意してください。
したがって、アラームが発生したときにメッセージを公開しようとすると、発行者はメッセージの送信をブロックされます。
すべてのパブリッシャーをブロックする場合は、vm_memory_high_watermarkを0に設定します。メモリベースのフロー制御を「無効」にする場合は、vm_memory_high_watermarkを100に設定します。上記のリンクの詳細を参照してください。
値0を指定すると、メモリアラームがすぐにオフになり、すべての公開が無効になります(これは、公開をグローバルに無効にする場合に役立ちます。rabbitmqctlset_vm_memory_high_watermark0を使用してください)。メモリアラームがまったく鳴らないようにするには、100などの高い乗数を設定します。