Ресурс временно недоступен при подключении к апстриму (php5-fpm)
Я часто получаю эту ошибку на случайных страницах, когда ~ ~ 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
Я также удвоил вышеупомянутые значения (т.е. 60 детей, 10 стартов, 10 макс. Серверов) безрезультатно.
/etc/nginx/nginx.conf
worker_connections 4024;
keepalive_timeout 10;
Сам Nginx за Varnish и memcached включен. рендеринг страниц довольно быстрый в целом.
Похоже, это довольно распространенная проблема, которую я не смог найти ни одного полезного решения или даже анализа возможных причин. Так что ваши советы / решения очень ценятся.
1 ответ
К сожалению, трудно дать однозначный ответ на этот вопрос без более подробной информации.
У меня есть пара предположений, хотя:
Мое первое предположение состоит в том, что ваши рабочие сокеты (ы) php5-fpm имеют слишком малое количество прослушиваний для вашей нагрузки. Длина очереди невыполненных заданий по умолчанию составляет 128 в Linux.
Чтобы увеличить его, вы должны:
- Увеличение
net.core.somaxconn
значение sysctl. - Увеличение
listen.backlog
Настройка конфигурации php5-fpm.
Например, вы можете попробовать увеличить их до 2048, чтобы посмотреть, поможет ли это.
Мое второе предположение - максимальное количество дескрипторов открытых файлов для каждого процесса nginx. Правильный способ увеличения зависит от вашего дистрибутива. В Ubuntu/Debian вы должны взглянуть на /etc/default/nginx
файл и worker_rlimit_nofile
Настройка конфигурации nginx.