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

閲覧: 428 回
最初の未読メッセージにスキップ

Aleksey Larionov

未読、
2015/07/22 9:25:342015/07/22
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

未読、
2015/07/22 10:15:082015/07/22
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.



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

Владимир Стафиевский
メッセージは削除されました

Aleksey Larionov

未読、
2015/07/22 11:40:512015/07/22
To: highload-php-ru
попробовал поиграться c max_fails=1  fail_timeout=10s. ошибки продолжают сыпаться.

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

Alex T

未読、
2015/07/22 11:47:382015/07/22
To: highloa...@googlegroups.com
Покажите настройки nginx

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

Vladimir Stafievsky

未読、
2015/07/22 11:51:022015/07/22
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

未読、
2015/07/22 11:55:102015/07/22
To: highloa...@googlegroups.com
php-fpm то у Вас и через сокет, и на 9000м порту висит? Или только на сокете? Если так, то этот апстрим лишний server 127.0.0.1:9000;

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

Aleksey Larionov

未読、
2015/07/22 12:49:092015/07/22
To: highload-php-ru
если убрать upstream ничего не меняется.
Upstream был добавлен для проверки гипотезы о том что какие-то проблемы с файловым сокетом.


Dima Golovchenko

未読、
2015/07/22 12:53:292015/07/22
To: highloa...@googlegroups.com

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

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


Aleksey Larionov

未読、
2015/07/22 12:59:552015/07/22
To: highload-php-ru
php_admin_value[max_execution_time] = 600


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


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

Aleksey Larionov

未読、
2015/07/22 13:08:012015/07/22
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

未読、
2015/07/22 14:04:512015/07/22
To: highloa...@googlegroups.com
В Error Log php идет сообщение PHP Fatal error, например
PHP Fatal error:  Maximum execution time of 10 seconds exceeded in ....

Aleksey Larionov

未読、
2015/07/22 14:23:142015/07/22
To: highload-php-ru
нет, нету ничего подобного..

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

Dima Golovchenko

未読、
2015/07/22 14:41:262015/07/22
To: highloa...@googlegroups.com
А логи вообще пишутся? Как-то время выполнения скриптов контролируется?

Aleksey Larionov

未読、
2015/07/22 15:24:402015/07/22
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

未読、
2015/07/22 15:28:422015/07/22
To: highloa...@googlegroups.com
Я про error_reporting и log_errors / error_log в php.ini (ну и в самих скриптах, если там они переопределяются), куда идут ошибки выполнения скриптов

Aleksey Larionov

未読、
2015/07/22 15:37:292015/07/22
To: highload-php-ru
нет ошибки скриптов никак не фиксируются..

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

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

Dima Golovchenko

未読、
2015/07/22 15:43:282015/07/22
To: highloa...@googlegroups.com
Так стоит посмотреть. Ну и на параметр max_execution_time в том же /etc/php5/fpm/php.ini

Aleksey Larionov

未読、
2015/07/23 2:14:152015/07/23
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

未読、
2015/07/23 3:42:212015/07/23
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

未読、
2015/07/23 5:24:092015/07/23
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

未読、
2015/07/23 5:44:412015/07/23
To: highloa...@googlegroups.com、just...@gmail.com

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

Aleksey Larionov

未読、
2015/07/23 8:14:582015/07/23
To: highload-php-ru、just...@gmail.com、dima...@gmail.com
единственное что приходит в голову - это активация HugePages и запуск memcache с опцией -L

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

Dima Golovchenko

未読、
2015/07/23 9:40:492015/07/23
To: Aleksey Larionov、highload-php-ru、just...@gmail.com
Для начала стоит разобраться что и почему не влазит в memcacheи после этого уже думать как с этим бороться
全員に返信
投稿者に返信
転送
新着メール 0 件