У меня есть установка, состоящая из балансировщика нагрузки, двух веб-серверов с nginx / php-fpm7.1 и сервера базы данных с mariadb.
Последние несколько месяцев я изо всех сил пытался выяснить причину и устранить нерегулярные тайм-ауты, и, наконец, прошу здесь поделиться мыслями. Насколько мне известно, во время этого события ничего не изменилось. Кроме того, я видел, что php-fpm полностью отказывает, и мне пришлось перезапустить службу.
Я вижу следующие ошибки и получаю предупреждения в течение дня через xymon:
2018/07/11 14:27:23 [error] 13461#13461: *920760 upstream timed out (110: Connection timed out) while reading response header from upstream, client: *.*.*.*, server: www.something.com, request: "GET /something/something HTTP/1.1", upstream: "fastcgi://unix:/run/php-fpm/something.com.sock", host: "www.something.com"
В установке размещено около 5 сайтов, из которых только один работает через балансировщик нагрузки, все остальные направлены на веб-сервер 1, так как я получаю предупреждения для всех сайтов, которые просматриваю, только на веб-сервере 1.
Общая конфигурация nginx, используемая всеми сайтами, выглядит следующим образом:
worker_processes 2;
user nginx www-data;
pid /run/nginx.pid;
worker_rlimit_nofile 100000;
events {
worker_connections 1024;
multi_accept on;
use epoll;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
keepalive_requests 200;
client_max_body_size 16m;
client_body_timeout 32;
client_header_timeout 32;
reset_timedout_connection on;
send_timeout 600;
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
fastcgi_buffers 8 128k;
fastcgi_buffer_size 256k;
open_file_cache max=10000 inactive=30s;
open_file_cache_valid 60s;
open_file_cache_min_uses 2;
open_file_cache_errors on;
Кроме того, у меня есть похожие места на каждом виртуальном хосте.
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/run/php-fpm/something.com.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_read_timeout 30s;
include fastcgi_params;
}
И каждый сайт имеет свой собственный пул fpm, каждый из которых имеет следующие изменения:
pm = ondemand
pm.max_children = 12
pm.start_servers = 4
pm.min_spare_servers = 4
pm.max_spare_servers = 8
pm.max_requests = 15000
Основной сайт, который работает через балансировщик нагрузки, имеет следующие изменения fpm в своем пуле
pm = dynamic
pm.max_children = 100
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 8
pm.max_requests = 15000
Все, что я предпринял, не привело к изменениям, включая обновление всех пакетов yum и перезагрузку. В настоящее время на этих машинах нет высокой нагрузки, хотя такое бывает.
Любые мысли или помощь относительно дальнейшей отладки были бы очень полезны!
Обновить
Журнал медленной работы сообщает о таких вещах:
[11-Jul-2018 14:53:12] WARNING: [pool something.com] child 53001, script '/var/www/something.com/index.php' (request: "GET /index.php?q=/404.html&") executing too slow (11.267915 sec), logging
Возможно, тогда это больше связано с сервером maria?
Скорее всего, со временем изменился размер базы данных на веб-сервере.
Эта и, возможно, неэффективные операторы SQL / структура БД могут привести к тому, что запросы БД займут слишком много времени, и, следовательно, произойдет тайм-аут.