nginx + php5-fpm中的错误502

and*_*487 43 php fastcgi nginx

我对subj有一些错误.服务器没有高负载:~15%的CPU,有几个Gb的内存,硬盘不是buisy.但是错误502大约在3%的情况下抛出.

程序:Debian 6,nginx/0.7.62,php5-fpm(5.3.3-1).

在nginx的error.log中是这个错误:

connect() to unix:/var/run/php5-fpm.sock failed
Run Code Online (Sandbox Code Playgroud)

php5-fpm的状态通常是这样的:

accepted conn:   41680
pool:             www
process manager:  dynamic
idle processes:   258
active processes: 1
total processes:  259
Run Code Online (Sandbox Code Playgroud)

我认为,这意味着负载不高.

我增加了积压参数:在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;
}
Run Code Online (Sandbox Code Playgroud)

的/ 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;
Run Code Online (Sandbox Code Playgroud)

php-fpm池

[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
Run Code Online (Sandbox Code Playgroud)

如何优化此系统并使其使用所有服务器资源?

PS.对不起,我的英语不好.

Dmi*_*rov 104

问题是socket本身,它在高负载情况下的问题是众所周知的.请考虑使用TCP\IP连接而不是unix socket,因为您需要进行以下更改:

  • php-fpm池配置中替换listen = /var/run/php5-fpm.socklisten = 127.0.0.1:7777
  • / etc/nginx/php_location中替换fastcgi_pass unix:/var/run/php5-fpm.sock;fastcgi_pass 127.0.0.1:7777;

  • 我认为这里有一个错误.缺少`=`符号.它应该是`listen = 127.0.0.1:7777`,而不是`listen 127.0.0.1:7777` AFAIK. (4认同)
  • 我对同事的原因的解释被我的同事证明是错误的,但似乎仍然为许多人工作.多年以后我仍然在寻找问题的根本原因而找不到它. (4认同)
  • 现在好多了.另外我想说将PHP更新到5.4版有很好的效果. (2认同)
  • 找到它 - 它现在位于`/ etc/nginx/sites-available/*`中 (2认同)
  • 在php-fpm池配置的ubuntu位置是/etc/php5/fpm/pool.d/www.conf也不要忘记在进行这些更改后重启nginx和php5-fpm服务. (2认同)