Я часто получаю эту ошибку на случайных страницах, когда они похожи на ~ + 10K соединений (netstat -an | grep 80 | wc -l). Это происходит, пока есть еще + 10 ГБ свободной памяти, а загрузка сервера меньше 3.
Мои соответствующие конфиги:
/etc/php5/fpm/php.ini
memory_limit = 1024M
default_socket_timeout = 120
/etc/php5/fpm/pool.d/www.conf
pm = dynamic
pm.max_children = 30
pm.start_servers = 5
pm.min_spare_servers = 2
pm.max_spare_servers = 5
;pm.max_requests =20000 #uncommented with any value didn't fixed
request_terminate_timeout = 120s
Я также удвоил указанные выше vlues (т.е. 60 детей, 10 начальных, 10 максимальных серверов) безрезультатно.
/etc/nginx/nginx.conf
worker_connections 4024;
keepalive_timeout 10;
Сам Nginx за Varnish и memcached включен. рендеринг страницы в целом выполняется довольно быстро.
Кажется, это довольно распространенная проблема. Я не смог найти никакого полезного решения или даже анализа возможных причин. Так что ваши советы / решения очень ценятся.
К сожалению, без подробностей трудно дать однозначный ответ на этот вопрос.
У меня есть пара предположений:
Мое первое предположение состоит в том, что ваши рабочие сокеты php5-fpm имеют слишком маленькое невыполненное прослушивание для вашей нагрузки. Длина очереди невыполненных работ по умолчанию в Linux составляет 128.
Для его увеличения вам следует:
net.core.somaxconn
sysctl значение.listen.backlog
Настройка конфигурации php5-fpm.Например, вы можете попробовать увеличить оба значения до 2048, чтобы посмотреть, поможет ли это.
Мое второе предположение - это ограничение на максимальное количество открытых файловых дескрипторов для рабочих процессов nginx. Правильный способ увеличения зависит от вашего дистрибутива. В Ubuntu / Debian вам следует заглянуть в /etc/default/nginx
файл и worker_rlimit_nofile
Настройка конфигурации nginx.