Я хочу знать, кто регулирует количество дескрипторов сокета?
Кроме того, как автоматически закрыть соединение для ограниченного таймаута?
Я хочу знать, кто регулирует количество дескрипторов сокета?
Кроме того, как автоматически закрыть соединение для ограниченного таймаута?
Похоже, вам нужно изменить максимальные открытые дескрипторы файлов в вашей системе.
Из руководства по установке RabbitMQ для систем Debian и Ubuntu, раздел Контроль системных ограничений:
В установках RabbitMQ, выполняющих производственные рабочие нагрузки, может потребоваться система ограничения и настройки параметров ядра для обработки приличного количества параллельных соединений и очередей. Основная настройка, которая необходима настройка - максимальное количество открытых файлов, также известное как ulimit -n. Значение по умолчанию для многих операционных систем слишком низкое для обмена сообщениями брокер (например, 1024 в нескольких дистрибутивах Linux). Мы рекомендуем позволяя по меньшей мере 65536 дескрипторов файлов для пользователя rabbitmq в производственных условиях. 4096 должно быть достаточно для большинства рабочей нагрузки разработки.
В игре есть два ограничения: максимальное количество открытых файлов ОС kernel позволяет (fs.file-max) и лимит пользователя (ulimit -n). прежнее должно быть выше последнего.
Самый простой способ настроить ограничение для каждого пользователя для RabbitMQ это отредактировать /etc/default/rabbitmq -server (предоставленный RabbitMQ Debian) или rabbitmq-env.conf, чтобы вызвать ulimit до служба запускается.
ulimit -S -n 4096
Этот мягкий предел не может превышать жесткий предел (по умолчанию до 4096 во многих дистрибутивах). Жесткий лимит может быть увеличен через /etc/security/limits.conf. Это также требует pam_limits.so и перезагрузитесь или перезагрузитесь.
Обратите внимание, что ограничения для использования ОС не могут быть изменены.
Для получения дополнительной информации об управлении fs.file-max с помощью sysctl, пожалуйста обратитесь к отличному руководству Riak по настройке ограничения доступа к файлам.
P.S:.
Аналогичная проблема обсуждалась в списке рассылки RabbitMQ " Увеличение ограничения файловых дескрипторов". Последнее сообщение содержит окончательную ссылку на установочный документ RabbitMQ и явно указывает на проблему с ulimit, но чтение через нее также может помочь вам справиться с вашей проблемой, в то время как весь поток охватывает проблему с ограничениями дескрипторов из разных точек.
Я запускаю RabbitMQ 3.6.3 на Ubuntu 16.04 и с этими более новыми версиями ответ, данный здесь (с использованием ulimit в файле rabbitmq-server), больше не работал у меня.
Решение для меня состояло в том, чтобы настроить лимиты для systemd в этом файле
/etc/systemd/system/rabbitmq-server.service.d/override.conf
В этом файле поместите эту конфигурацию
[Service]
LimitNOFILE=32768
Где 32768 - количество файлов, которые вы хотите настроить.
Если вы отредактируете этот файл напрямую, вам нужно перезагрузить конфигурацию systemd с помощью
sudo systemctl daemon-reload
Но вы также можете использовать systemctl для редактирования файла, и в этом случае он автоматически перезагружает конфигурацию
sudo systemctl edit rabbitmq-server
вы можете добавить следующую строку в /etc/security/limits.conf
* soft nofile 65000
* hard nofile 65000
с этим вы устанавливаете ulimit на 65000
Я заметил, что другие ответы здесь отвечают на вопрос о том, как повысить лимит дескрипторов сокетов (установка ulimit -n <value>
в /etc/default/rabbitmq-server
), но никто из них не ответил на ваш другой вопрос (почему 829 дескрипторов сокетов, когда дескриптор файла предел равен 1024?)
Это связано с количеством других дескрипторов файлов, которые использует RabbitMQ. В какой-то степени у вас всегда будет меньшее количество дескрипторов сокетов (из моего собственного использования это около 90-95% от предела дескриптора файла). В документации RabbitMQ содержится рекомендация о том, что вы устанавливаете лимит дескриптора файла в 1,5 раза больше количества соединений, которые вы ожидаете иметь максимум: "Настройка большого количества подключений"
Решение, которое работало для меня на Ubuntu, this:
Сначала найдите правильный файл rabbitmq-server
. Вы можете сделать это, выполнив locate rabbitmq-server
в приглашении bash.
Затем откройте файл с помощью sudo vim /etc/default/rabbitmq-server
. Это файл, который будет содержать строку ulimit -n 4096
.
Если строка закомментирована с помощью #
, раскомментируйте ее.
Затем добавьте EOF
в качестве последней строки файла.
Теперь файл будет выглядеть следующим образом:
# 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 -n 4096
EOF
Теперь вам нужно перезапустить rabbitmq. Не перезагружайте операционную систему.
Найдите файл rabbitmqctl
и запустите: sudo /usr/sbin/rabbitmqctl stop
Затем снова запустите rabbitmq либо с помощью sudo /usr/sbin/rabbitmqctl start &
.
Что это. Теперь перейдите в интерфейс браузера RabbitMQ, и вы увидите, что количество сокетов увеличилось.