У меня есть прилично загруженный сервер FreeBSD Nginx, и я начинаю получать большое количество переполнений очереди прослушивания:
[root@svr ~]# netstat -sp tcp | fgrep listen
80361931 listen queue overflows
[root@svr ~]# netstat -Lan | grep "*.80"
tcp4 192/0/128 *.80
[root@svr ~]# sysctl kern.ipc.somaxconn
kern.ipc.somaxconn: 12288
[root@svr ~]#
Однако я не могу увеличить максимальную длину очереди прослушивания выше 128. Я увеличил kern.ipc.somaxconn, но это не изменило максимальное значение. Я что-то упускаю?
Спасибо!
Может быть очередь прослушивания ограничена до 128 дюймов конфигурация nginx
Посмотрите конфигурацию nginx для таких настроек:
listen 80 backlog=128;
И либо удалите отставание (по умолчанию -1 = использовать системный предел), либо измените значение на большее (8192 должно хватить даже для загруженного сервера). Если даже при увеличении очереди прослушивания вы все еще видите переполнение очереди прослушивания, это может указывать на то, что nginx заблокирован в течение длительного времени (из-за медленного / перегруженного жесткого диска или из-за плохо написанного стороннего модуля).
Kern.ipc.somaxconn может не делать то, что вы думаете. Это предел выдающихся и необработанный соединения. (например, это не ограничение на количество подключений, а в ожидании ограничить количество подключений).
Если использовать некомпьютерную аналогию: это максимальное количество звонящих телефонов (до того, как они будут сняты и отвечены), а не максимальное количество одновременных телефонных звонков.
Если у вас такое большое отставание, то вам нужно, чтобы ваше приложение чаще брало трубку (например, выделите ему больше ресурсов, больше процессора, лучшую структуру, что угодно).
Обратите внимание, что в разделе http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/configtuning-kernel-limits.html"> справочника FreeBSD об ограничениях ядра говорится следующее: (выделено мной).
Переменная sysctl kern.ipc.somaxconn ограничивает размер очереди прослушивания для приема новый TCP-соединения. Значение по умолчанию 128 обычно слишком мало для надежной обработки новых подключений в сильно загруженной среде веб-сервера. Для таких сред рекомендуется увеличить это значение до 1024 или выше. Сервисный демон может сам ограничивать размер очереди прослушивания.
У меня нет опыта работы с Nginx, но я также проверяю его файлы конфигурации на наличие вышеупомянутого ограничения со стороны приложения.