Cambiar el limite de ficheros abiertos de RabbitMQ en tiempo de ejecución

Por defecto el usuario con el que corre RabbitMQ tiene un límite de ficheros abiertos de 1024 si no se configuró dicho limite con antelación. Si el proceso no puede ser reiniciado para hacer efectivo un nuevo límite, es factible hacer dicha modificación en tiempo de ejecución. Se muestra a continuación los pasos a seguir con un ejemplo práctico.

Lectura previa recomendada: https://www.busindre.com/configurar_limite_de_ficheros_abiertos

Visualizar el límite configurado que tiene el servicio RabbitMQ en ejecución.

/etc/init.d/rabbitmq-server status

Status of node 'rabbit@srv-dm-mq' ...

[{pid,19791},

...

 {file_descriptors,
     [{total_limit,924}, <-------------
      {total_used,35},
      {sockets_limit,829},
      {sockets_used,31}]},
 {processes,[{limit,1048576},{used,511}]},
 {run_queue,0},
 {uptime,31107085}]

...done.

Identificar los PID de los de procesos de RabbitMQ.

19481
19782
19791
19896
19897

Adaptar el límite de ficheros abiertos a 65536 para dichos procesos en ejecución.

prlimit -n65536:65536 -n -p 19481
prlimit -n65536:65536 -n -p 19782
prlimit -n65536:65536 -n -p 19791
prlimit -n65536:65536 -n -p 19896
prlimit -n65536:65536 -n -p 19897

Se debe ejecutar el siguiente comando para que sea efectivo en RabbitMQ, se resta 100 al valor configurado previamente (65535 - 100).

rabbitmqctl eval "file_handle_cache:set_limit(65436)."

Se comprueba si los cambios han tenido efecto.

service rabbitmq-server status

Status of node 'rabbit@srv-dm-mq' ...

[{pid,19791},
...
 {file_descriptors,
     [{total_limit,65436}, <---------------------
      {total_used,35},
      {sockets_limit,58890},
      {sockets_used,31}]},
 {processes,[{limit,1048576},{used,511}]},
 {run_queue,0},
 {uptime,31110056}]
...done.