2012-08-29 13 views
12

sólo estoy mirando a los detalles de configuración de RabbitMQ y encontréRabbitMQ + Memory Límites

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

¿Qué significa esta configuración?

vm_memory_high_watermark conjunto a 0 means => ¿Bloquea todos los editores inmediatamente cuando se inicia la aplicación rabbitmq? Pero todavía vemos que rabbitmq puede poner en cola cualquier mensaje que le enviemos.

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

Cada vez que enviamos mensajes al intermediario vemos que el proceso de memoria aumenta. Entonces, ¿Significa esto que los mensajes están en memoria aunque la marca de agua está configurada en 0?

Tenemos curiosidad por saber qué sucede si el límite de memoria de ram alcanza y aún se envían mensajes. ¿O los editores están bloqueados? o ¿Los mensajes se intercambian en el disco si están disponibles?

Respuesta

13

La vm_memory_high_watermark es un valor porcentual relacionado con el control de flujo de memoria en RabbitMQ.

Si se echa un vistazo a Memory flow control verá que dice, bajo el título "basado en memoria de control de flujo":

El servidor RabbitMQ detecta la cantidad total de memoria RAM instalada en el ordenador en el arranque y cuando se ejecuta la fracción rabbitmqctl set_vm_memory_high_watermark. De forma predeterminada, cuando el servidor RabbitMQ utiliza más del 40% de la RAM instalada, genera una alarma de memoria y bloquea todas las conexiones. Una vez que la alarma de memoria se ha despejado (por ejemplo, debido a que el servidor envía mensajes a un disco o los entrega a clientes) se reanuda el servicio normal.

Así que al establecer este valor en 0, ¡por supuesto, se activará de inmediato! Si quieres que RabbitMQ pueda usar más memoria, entonces querrás INCREMENTAR el valor.

Otra nota importante: umbral de memoria

El valor predeterminado se establece en el 40% de RAM instalada. Tenga en cuenta que esto no impide que el servidor RabbitMQ use más del 40%, es simplemente el punto en el que los editores son acelerados.

Si intentas publicar mensajes cuando la alarma ha sido activada, tus editores no podrán enviar mensajes.

Si desea bloquear todos los editores a continuación, debería definir el vm_memory_high_watermark a 0. Si desea 'desactivar' de control de flujo basado en la memoria a continuación, la vm_memory_high_watermark a 100. Ver detalles del enlace anterior:

Un valor de 0 hace que la alarma de memoria se apague de inmediato y, por lo tanto, deshabilita todas las publicaciones (esto puede ser útil si desea desactivar la publicación global; use rabbitmqctl set_vm_memory_high_watermark 0). Para evitar que la alarma de memoria se apague, configure un alto multiplicador como 100.

+0

Ya había revisado ese documento. ¿Qué quiere decir con "acelerado" [el% de mensajes se puede descartar] y bloqueado [no se pueden enviar mensajes]? Si especifico 0%, entonces la alarma debería activarse en el momento en que la aplicación inicie el rito. entonces todos los mensajes del editor deben ser bloqueados rito? o estrangulado? ¿Qué ocurre si desactivo completamente el control de flujo basado en la memoria [0%]? – Tamil

+1

Impulsado en esta situación dará lugar a que los editores estén bloqueados por completo (porque la alarma se ha activado). Si especifica 0%, entonces tiene razón, la alarma se disparará y todos los editores serán bloqueados. Si desea deshabilitar el control de flujo basado en la memoria, establezca el valor en 100, 0 simplemente bloqueará todo – kzhen

+0

He actualizado mi respuesta – kzhen