Назад | Перейти на главную страницу

Таймауты nginx / php-fpm

У меня есть установка, состоящая из балансировщика нагрузки, двух веб-серверов с 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 / структура БД могут привести к тому, что запросы БД займут слишком много времени, и, следовательно, произойдет тайм-аут.