nginx, php-fpm и периодическая ошибка 502

439 views
Skip to first unread message

Aleksey Larionov

unread,
Jul 22, 2015, 9:25:34 AM7/22/15
to highload-php-ru
на сайте постоянно выскакивает ошибка 502, особенно часто её схватывают поисковые боты, при этом в error.log валится сообщение:

[code]
2015/07/22 15:05:21 [warn] 4390#4390: *1682 upstream server temporarily disabled while reading response header from upstream, client: 66.249.92.62, server:
[/code]

php/fpm/pool.d/site.conf

user = nginx
group = nginx
listen
= /var/run/fpm.sock
listen
.owner = nginx
listen
.group = nginx


pm
= static
pm
.max_children = 64
pm
.max_requests = 10240
pm
.process_idle_timeout = 10s
chdir
= /


slowlog = /
var/log/php5-fpm-slow.log
request_slowlog_timeout
= 10s


php_admin_value
[memory_limit] = 1024M
php_admin_flag
[short_open_tag] = On
php_admin_value
[date.timezone] = Europe/Moscow
php_admin_value
[post_max_size] = 512M
php_admin_value
[max_execution_time] = 600
php_admin_value
[max_input_vars] = 6000



nginx:

    location ~ \.php {
        fastcgi_pass  php
;
        fastcgi_read_timeout
600;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name
;
        include fastcgi_params
;
        fastcgi_buffers
16 128k;
        fastcgi_buffer_size
128k;
        fastcgi_max_temp_file_size
0;
   
}


Версии:

~ # cat /etc/debian_version
8.1


~ # php5-fpm -v
PHP
5.6.9-0+deb8u1 (fpm-fcgi) (built: Jun  5 2015 11:03:52)
Copyright (c) 1997-2015 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2015 Zend Technologies
   
with Zend OPcache v7.0.4-dev, Copyright (c) 1999-2015, by Zend Technologies


~ # nginx -v
nginx version
: nginx/1.9.3



Vladimir Stafievsky

unread,
Jul 22, 2015, 10:15:08 AM7/22/15
to highloa...@googlegroups.com
А конфиг апстрима?
Аля
"server 127.0.0.1:9000 max_fails=1  fail_timeout=10s;"
Особенно интересуют как раз параметры max_fails и fail_timeout. Попробуйте их покрутить, быть может у вас просто бэкенд медленно отвечает.

22 июля 2015 г., 16:14 пользователь Aleksey Larionov <nesk...@gmail.com> написал:

--

---
Вы получили это сообщение, поскольку подписаны на группу "highload-php-ru".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес highload-php-...@googlegroups.com.
Чтобы настроить другие параметры, перейдите по ссылке https://groups.google.com/d/optout.



--
С уважением,

Владимир Стафиевский
Message has been deleted

Aleksey Larionov

unread,
Jul 22, 2015, 11:40:51 AM7/22/15
to highload-php-ru
попробовал поиграться c max_fails=1  fail_timeout=10s. ошибки продолжают сыпаться.

среда, 22 июля 2015 г., 17:15:08 UTC+3 пользователь Vladimir написал:

Alex T

unread,
Jul 22, 2015, 11:47:38 AM7/22/15
to highloa...@googlegroups.com
Покажите настройки nginx

22 июля 2015 г., 18:40 пользователь Aleksey Larionov <nesk...@gmail.com> написал:

Vladimir Stafievsky

unread,
Jul 22, 2015, 11:51:02 AM7/22/15
to highloa...@googlegroups.com
В конфиге апстрима у вас server unix:/var/run/turbina-fpm.sock
А, в конфиге php-fpm у вас listen = /var/run/fpm.sock


22 июля 2015 г., 18:47 пользователь Alex T <atr...@gmail.com> написал:

Vladimir Stafievsky

unread,
Jul 22, 2015, 11:55:10 AM7/22/15
to highloa...@googlegroups.com
php-fpm то у Вас и через сокет, и на 9000м порту висит? Или только на сокете? Если так, то этот апстрим лишний server 127.0.0.1:9000;

22 июля 2015 г., 18:51 пользователь Vladimir Stafievsky <just...@gmail.com> написал:

Aleksey Larionov

unread,
Jul 22, 2015, 12:49:09 PM7/22/15
to highload-php-ru
если убрать upstream ничего не меняется.
Upstream был добавлен для проверки гипотезы о том что какие-то проблемы с файловым сокетом.


Dima Golovchenko

unread,
Jul 22, 2015, 12:53:29 PM7/22/15
to highloa...@googlegroups.com

Каково время выполнения php скриптов? Умирают ли они по max_execution_time?

22 lip 2015 18:49 "Aleksey Larionov" <nesk...@gmail.com> napisał(a):
если убрать upstream ничего не меняется.
Upstream был добавлен для проверки гипотезы о том что какие-то проблемы с файловым сокетом.


Aleksey Larionov

unread,
Jul 22, 2015, 12:59:55 PM7/22/15
to highload-php-ru
php_admin_value[max_execution_time] = 600


какое сообщение сопутствует, обычно, смерти выполнения скрипта?


среда, 22 июля 2015 г., 19:53:29 UTC+3 пользователь dimagolov написал:

Aleksey Larionov

unread,
Jul 22, 2015, 1:08:01 PM7/22/15
to highload-php-ru
user nginx;
worker_processes  
16;

events
{
    worker_connections  
1024;
   
use                 epoll;
}

error_log
/var/log/nginx/error.log crit;
worker_rlimit_nofile
200000;

http
{
    sendfile                        on
;
    tcp_nopush                      on
;
    tcp_nodelay                     on
;
    client_max_body_size            
32m;
    send_timeout                    
15;
    server_tokens                   off
;
    keepalive_timeout              
30;
    keepalive_requests              
100;
    client_body_timeout            
10;
    reset_timedout_connection       on
;
   
    log_format  e5xx    
'$status [$time_local] $remote_addr "$request" '
                        '"$http_user_agent" -- $connection_requests';

    map $status $loggable
{
       
~^[234]  0;
       
default 1;
   
}

    access_log          
/var/log/nginx/e5xx.log  e5xx if=$loggable;

    include            
/etc/nginx/mime.types;
    default_type        application
/octet-stream;

    gzip                on
;
    gzip_comp_level    
6;
    gzip_min_length    
32;
    gzip_buffers        
8 64k;
    gzip_proxied        any
;
    gzip_types          
*;

    open_file_cache max
=200000 inactive=20s;
    open_file_cache_valid
30s;
    open_file_cache_min_uses
1;
    include
/etc/nginx/conf.d/*.conf;
}

Dima Golovchenko

unread,
Jul 22, 2015, 2:04:51 PM7/22/15
to highloa...@googlegroups.com
В Error Log php идет сообщение PHP Fatal error, например
PHP Fatal error:  Maximum execution time of 10 seconds exceeded in ....

Aleksey Larionov

unread,
Jul 22, 2015, 2:23:14 PM7/22/15
to highload-php-ru
нет, нету ничего подобного..

среда, 22 июля 2015 г., 21:04:51 UTC+3 пользователь dimagolov написал:

Dima Golovchenko

unread,
Jul 22, 2015, 2:41:26 PM7/22/15
to highloa...@googlegroups.com
А логи вообще пишутся? Как-то время выполнения скриптов контролируется?

Aleksey Larionov

unread,
Jul 22, 2015, 3:24:40 PM7/22/15
to highload-php-ru
да, включен slowlog
slowlog = /var/log/php5-fpm-slow.log
request_slowlog_timeout
= 10s


среда, 22 июля 2015 г., 21:41:26 UTC+3 пользователь dimagolov написал:

Dima Golovchenko

unread,
Jul 22, 2015, 3:28:42 PM7/22/15
to highloa...@googlegroups.com
Я про error_reporting и log_errors / error_log в php.ini (ну и в самих скриптах, если там они переопределяются), куда идут ошибки выполнения скриптов

Aleksey Larionov

unread,
Jul 22, 2015, 3:37:29 PM7/22/15
to highload-php-ru
нет ошибки скриптов никак не фиксируются..

на debian 7.8 такой беды не было. Конфиги с того момента не менялись, скрипты тоже... а ошибка после обновления появилась/, потому никаму не пришло в голову смотреть в сторону времени выполнения скриптов и ошибок в скриптах.

среда, 22 июля 2015 г., 22:28:42 UTC+3 пользователь dimagolov написал:

Dima Golovchenko

unread,
Jul 22, 2015, 3:43:28 PM7/22/15
to highloa...@googlegroups.com
Так стоит посмотреть. Ну и на параметр max_execution_time в том же /etc/php5/fpm/php.ini

Aleksey Larionov

unread,
Jul 23, 2015, 2:14:15 AM7/23/15
to highload-php-ru, dima...@gmail.com
У меня max_execution_time указан в php/fpm/pool.d/site.conf:
php_admin_value[max_execution_time] = 600

я так понимаю что он перекрывает max_execution_time  в /etc/php5/fpm/php.ini

среда, 22 июля 2015 г., 22:43:28 UTC+3 пользователь dimagolov написал:

Vladimir Stafievsky

unread,
Jul 23, 2015, 3:42:21 AM7/23/15
to highloa...@googlegroups.com
1. Попробуйте действительно включить error'логи
catch_workers_output = yes
php_admin_value[error_log] = /var/log/php-fpm-error.log
php_admin_flag[log_errors] = on

2. В slow-логах то пусто?

3. Так же попробуйте оставить только один апстрим 
server 127.0.0.1:9000 max_fails=5  fail_timeout=10s; (настройте чтобы php-fpm слушал на 9000м порту, если он этого еще не делает)

4. Если у вас есть "тяжелые" запросы, которые могут "забивать" пул php-fpm, то можно попробовать сделать его dynamic
pm = dynamic
pm.max_children = 64
pm.start_servers = 32
pm.min_spare_servers = 48
pm.max_spare_servers = 64

5. Ну и еще, как вариант, включайте debug в nginx (можно только для определенного IP через debug_connection, правда потребуется поставить debug-версию nginx и запустить его вместо обычного) и смотрите подробно что там с этими запросами, на которые возвращаются 502, происходит.


23 июля 2015 г., 9:14 пользователь Aleksey Larionov <nesk...@gmail.com> написал:



--
С уважением,

Владимир Стафиевский

Aleksey Larionov

unread,
Jul 23, 2015, 5:24:09 AM7/23/15
to highload-php-ru, just...@gmail.com
вот ошибка, которая встретилась после включения логов... таких ошибок много.. других не вижу.

[23-Jul-2015 12:21:04] WARNING: [pool site] child 5230 said into stderr: "NOTICE: PHP message: PHP Notice:  MemcachePool::set(): Server 127.0.0.1 (tcp 11211, udp 0) failed with: "ERVER_ERROR object too large for cache

четверг, 23 июля 2015 г., 10:42:21 UTC+3 пользователь Vladimir написал:

Dima Golovchenko

unread,
Jul 23, 2015, 5:44:41 AM7/23/15
to highloa...@googlegroups.com, just...@gmail.com

Лечите memcache или порядок его использовали, скрипты валяться с fatalом и nginx естественным образом отдает 502

Aleksey Larionov

unread,
Jul 23, 2015, 8:14:58 AM7/23/15
to highload-php-ru, just...@gmail.com, dima...@gmail.com
единственное что приходит в голову - это активация HugePages и запуск memcache с опцией -L

четверг, 23 июля 2015 г., 12:44:41 UTC+3 пользователь dimagolov написал:

Dima Golovchenko

unread,
Jul 23, 2015, 9:40:49 AM7/23/15
to Aleksey Larionov, highload-php-ru, just...@gmail.com
Для начала стоит разобраться что и почему не влазит в memcacheи после этого уже думать как с этим бороться
Reply all
Reply to author
Forward
0 new messages