Об этом спрашивали много раз, но ни один из ответов не помог.После нескольких часов копания я обращаюсь за помощью.Я разработчик с ограниченным опытом работы с сисадминами, но поскольку наш сотрудник ушел, мне осталось попытаться сохранить жизнь.
На одном из наших сайтов мы недавно начали случайно получать 502 ошибки.Это происходит довольно регулярно, по крайней мере, десяток раз в день (как сообщают nagios, а иногда и наши пользователи).Я не в курсе каких-либо изменений конфигурации.Веб-стек является стандартным - сервер nginx передает запросы php-fpm, который запускает приложение на основе wordpress.
Журнал ошибок nginx содержит много сообщений, подобных этому:
[error] 31180#31180: *451395 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: x.x.x.x, server: x.x, request: "GET /x/x/ HTTP/1.0", upstream: "fastcgi://127.0.0.1:9000", host: "x.x.x"
Большинство из них приходят с IP-адреса клиента, который является IP-адресом самого сервера (не уверен, почему, может быть, какой-то мониторинг?), Но также есть ошибки от случайных общедоступных IP-адресов.
PHP-Журнал FPM выдает подобные предупреждения примерно каждый час:
WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 8 children, there are 0 idle, and 71 total children
WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 16 children, there are 0 idle, and 75 total children
WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 32 children, there are 0 idle, and 79 total children
WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 32 children, there are 0 idle, and 83 total children
WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 32 children, there are 0 idle, and 87 total children
WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 32 children, there are 0 idle, and 91 total children
WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 32 children, there are 0 idle, and 95 total children
WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 32 children, there are 0 idle, and 99 total children
WARNING: [pool www] server reached pm.max_children setting (100), consider raising it
Вещи, которые я пробовал
Перезагрузка
Очевидно, но не помогло совсем.
Увеличение ресурсов PHP-FPM дочерних процессов
- Увеличение доступной оперативной памяти, CPU не помогло.Диск не заполнен, иноды не используются полностью.
- С увеличенными ресурсами я установил
pm.max_children
на 100. Первоначально было 40, и это было хорошо в течение многих лет работы.После просмотра журнала я попытался увеличить его до 75, а затем до 100. - На другом веб-сайте, в котором в несколько раз больше посетителей, меньше оборудования и он работает просто отлично.Этот веб-сайт не обслуживает какой-либо сложный контент, в основном, только блоги.
Для завершения конфигурация FPM выглядит следующим образом:
pm.max_children = 100
pm.start_servers = 24
pm.min_spare_servers = 4
pm.max_spare_servers = 64
pm.max_requests = 500
Тамв журналах также нет упоминаний о запуске OOM.
Исследование opcache
Я прочитал, что из-за нехватки памяти в opcache может быть виновник.Увы, у него есть запасная память:
Cache hits 89757614
Cache misses 1174
Used memory 58333696
Free memory 75884032
Wasted memory 0
OOM restarts 0
Тайм-ауты Nginx
Параметры Nginx не должны быть проблемой, так как буфер и тайм-аутзначения кажутся довольно щедрыми (я предполагаю, что единица измерения - 3000 секунд):
client_header_timeout 3000;
client_body_timeout 3000;
fastcgi_read_timeout 3000;
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
Другая информация
- PHP-FPM не падает,в его логах ничего нет, кроме предупреждений о потомках
- xdebug отключен
- syslog, dmesg не содержит соответствующих сообщений
- php7.0, nginx 1.12.2
Могу ли я попробовать еще что-нибудь?
Ссылки на вещи, которые не работали