Socket error: could not connect to host.
Как избавиться от таких ошибок в rabbitMQ?
Во-первых, нужно посмотреть сколько для rabbit доступно открытых файлов (см. 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 есть некоторые проблемы с автоматическим освобождением ресурсов. Точнее дело в том, что rabbitMQ освобождает ресурсы в какие то моменты, а мы можем не дождаться этого момента и быть "отфутболенным".
Для увеличения количества свободных файлов нам могут помочь следующие действия:
- Перезагрузка rabbitMQ (как временное решение).
- Увеличение количества открытых файлов в настройках 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
.
Комментарии 0