it-swarm.com.ru

Ошибка 502 в nginx + php5-fpm

У меня есть ошибка с Subj. Сервер не сильно загружен: ~ 15% ЦП, несколько ГБ памяти, жесткий диск не работает. Но ошибку 502 выдает примерно в 3% случаев.

Программы: Debian 6, nginx/0.7.62, php5-fpm (5.3.3-1).

В error.log nginx есть эта ошибка: 

connect() to unix:/var/run/php5-fpm.sock failed

Состояние php5-fpm обычно такое:

accepted conn:   41680
pool:             www
process manager:  dynamic
idle processes:   258
active processes: 1
total processes:  259

Я думаю, это означает, что загрузка не высока.

Я увеличил параметры журнала невыполненных работ: в sysctl - net.core.somaxconn = 5000, в пуле php-fpm - listen.backlog = 5000. Никакого эффекта.

Я цитирую конфигурацию:

/etc/nginx/nginx.conf

user www-data;
worker_processes  8;
timer_resolution 100ms;
worker_rlimit_nofile 20240;
worker_priority -5;

error_log  /var/log/nginx/error.log;
pid        /var/run/nginx.pid;

events {
    worker_connections  2048;
    use epoll;
    # multi_accept on;
}

http {
    include       /etc/nginx/mime.types;

    access_log  /var/log/nginx/access.log;

    sendfile        on;
    tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;
    tcp_nodelay        on;

    gzip  on;
    gzip_min_length 1100;
    gzip_buffers 64 8k;
    gzip_comp_level 3;
    gzip_http_version 1.1;
    gzip_proxied any;
    gzip_types text/plain application/xml application/x-javascript text/css;
    gzip_disable "MSIE [1-6]\.(?!.*SV1)";

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;

    client_max_body_size 100M;
    server_tokens off;
}

/etc/nginx/php_location

fastcgi_pass   unix:/var/run/php5-fpm.sock;
fastcgi_index  index.php;
fastcgi_param  SCRIPT_FILENAME  $document_root/$fastcgi_script_name;
fastcgi_buffers 256 128k;
#fastcgi_buffer_size 16k;
#fastcgi_busy_buffers_size 256k;
fastcgi_connect_timeout 300s;
fastcgi_send_timeout 300s;
fastcgi_read_timeout 300s;
include fastcgi_params;

php-fpm pool

[www]
listen = /var/run/php5-fpm.sock
listen.backlog = 5000
listen.owner = www-data
listen.group = www-data
listen.mode = 0666
user = www-data
group = www-data
pm = dynamic
pm.max_children = 1024
pm.start_servers = 64
pm.min_spare_servers = 64
pm.max_spare_servers = 128
pm.max_requests = 32000
pm.status_path = /system/php5-fpm-status
slowlog = /var/www/log/php-fpm.log.slow
chdir = /var/www

Что я могу сделать, чтобы оптимизировать эту систему и использовать для этого все ресурсы сервера?

PS. Извините, мой английский плохой.

43
andre487

Проблема заключается в самом сокете, его проблемы в случаях высокой нагрузки хорошо известны. Пожалуйста, рассмотрите возможность использования соединения TCP\IP вместо сокета unix, для этого вам необходимо внести следующие изменения:

  • в настройка пула php-fpm замените listen = /var/run/php5-fpm.sock на listen = 127.0.0.1:7777
  • в/etc/nginx/php_location заменить fastcgi_pass unix:/var/run/php5-fpm.sock; на fastcgi_pass 127.0.0.1:7777;
104
Dmitry Verhoturov

На Centos 7, Plesk 12,5

У меня возникла эта проблема после того, как мой жесткий диск полностью заполнился, и некоторые службы перестали работать…. Другие домены работали отлично, но ни один из них не дал мне только 502 и похоже на тайм-ауты. Из журнала ошибок:

[crit] 3112#0: *65746768 connect() to 
unix:///var/www/vhosts/system/sub.domain.de/php-fpm.sock failed 
(2: No such file or directory) while connecting to upstream

Чтобы решить эту проблему, мне пришлось (сначала освободить место, а затем) перезапустить php-fpm и nginx - тогда эта ошибка исчезла!

2
Nibbels

Единственная причина, по которой этот файл не создан - это конфигурация в /etc/php-fpm.d/www.conf.

Change listen = 127.0.0.1:9000

Слушай = /var/run/php-fpm/php-fpm.sock

Затем перезапустите nginx и php-fpm.

0
Rohit Gupta