Тюнинг rabbitMQ

Socket error: could not connect to host.

Как избавиться от таких ошибок в rabbitMQ?

Во-первых, нужно посмотреть сколько для rabbit доступно открытых файлов (см. file descriptors и socket descriptors).

RabbitMQ настраиваем file descriptors и socket descriptors

Это можно сделать либо через админку на вкладке Overview. Либо через консоль с помощью команды sudo rabbitmqctl status:

$ sudo rabbitmqctl status | grep -A 2 file_descriptors 
 {file_descriptors,
     [{total_limit,10140},
      {total_used,8622},

Во-вторых, если количество открытых файлов приближается к максимально доступному (доступные ресурсы см. total_limit в консоли или available в админке), то это значит что ресурсы rabbitMQ заканчиваются и он может "отфутболивать" соединения. Это выглядит будто rabbitMQ подвис.

У rabbitMQ есть некоторые  проблемы с автоматическим освобождением ресурсов.

Для увеличения количества свободных файлов нам могут помочь следующие действия:

  1. Перезагрузка rabbitMQ (как временное решение).
  2. Увеличение количества открытых файлов в настройках rabbitMQ. (для вступления изменений в силу все равно требуется перезапуск rabbit).

Как увеличить количество file descriptors / socket descriptors rabbitmq?

Это настраивается в файле /etc/default/rabbitmq-server. Вот всё его содержимое:

$ cat /etc/default/rabbitmq-server
# This file is sourced by /etc/init.d/rabbitmq-server. Its primary
# reason for existing is to allow adjustment of system limits for the
# rabbitmq-server process.
#
# Maximum number of open file handles. This will need to be increased
# to handle many simultaneous connections. Refer to the system
# documentation for ulimit (in man bash) for more information.
#

ulimit -S -n 1024

Нужно изменить единственный параметр ulimit -S -n <VALUE> и установить вместо <VALUE> значение 4096, 8192, 10240,  12288 или то, которое вам ближе. Затем перезапустить кролика.

После этого лимит открытых файлов должен увеличиться. Проверим, так ли это:

$ sudo rabbitmqctl status | grep -A 4 file_descriptors
 {file_descriptors,
     [{total_limit,99900},
      {total_used,5085},
      {sockets_limit,89908},
      {sockets_used,3386}]},

Если у вас не получаетcя задать большой ulimit:

/etc/init.d/rabbitmq-server: 11: ulimit: error setting limit (Invalid argument)

То сначала установите более высокий hard limit, затем soft limit. Т.к. софт лимит не может быть больше hard limit. Задаём в две строки:

ulimit -n 100000 #hard limit
ulimit -S -n 100000 #soft limit

Первый можно с -H.

 
 
 
 

icon Комментарии 0

Ваш комментарий к статье.. (для авторизованных)

ctrl+enter

icon Вход в систему

зарегистрироваться
НОВЫЕ ПОЛЬЗОВАТЕЛИ