Подтвердить что ты не робот

Ограничения памяти RabbitMQ +

Я просто просматриваю детали конфигурации 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

Всякий раз, когда мы отправляем msgs брокеру, мы увеличиваем использование этого процесса. Итак, означает ли это, что msgs находятся в памяти, хотя для водяного знака установлено значение 0?

Нам любопытно узнать, что произойдет, если будет отправлено ограничение mem ram и все еще msgs? Либо издатели заблокированы? или Сообщения выгружаются на диск, если они доступны?

4b9b3361

Ответ 1

Vm_memory_high_watermark - это процентное значение, связанное с управлением потоком памяти в RabbitMQ.

Если вы посмотрите на Управление потоками памяти, вы увидите, что в разделе "Контроль потока на основе памяти" указано:

Сервер RabbitMQ обнаруживает общий объем ОЗУ, установленный в компьютере при запуске, и когда выполняется rabbitmqctl set_vm_memory_high_watermark. По умолчанию, когда сервер RabbitMQ использует более 40% установленной ОЗУ, он вызывает тревогу памяти и блокирует все подключения. Как только аварийный сигнал памяти очищается (например, из-за сообщений пейджинга сервера на диск или доставки их клиентам), нормальный сервис возобновляется.

Таким образом, вы установили это значение равным 0, тогда, конечно, он сразу же запустится! Если вы хотите, чтобы RabbitMQ разрешалось использовать больше памяти, вам нужно УВЕЛИЧИТЬ значение.

Еще одно важное замечание:

Порог памяти по умолчанию установлен на 40% установленной ОЗУ. Обратите внимание, что это не мешает серверу RabbitMQ использовать более 40%, это всего лишь точка, в которой издатели дросселируются.

Итак, если вы попытаетесь опубликовать сообщения, когда был поднят будильник, ваши издатели будут заблокированы от отправки сообщений.

Если вы хотите заблокировать все издатели, вы должны установить vm_memory_high_watermark равным 0. Если вы хотите "отключить" управление потоком на основе памяти, установите для vm_memory_high_watermark значение 100. См. подробности из приведенной выше ссылки:

Значение 0 немедленно отключает тревогу памяти и, следовательно, отключает публикацию (это может быть полезно, если вы хотите отключить публикацию по всему миру, используйте rabbitmqctl set_vm_memory_high_watermark 0). Чтобы предотвратить подавление сигнала тревоги памяти, установите некоторый высокий множитель, например 100.