web-dev-qa-db-ja.com

アップストリームへの接続中にphp-fpm.sockが失敗しました(11:リソースは一時的に使用不可)

1秒あたり200ヒットをテストすると、サイトで次のエラーが発生します。

最初に499エラーを受け取りました

2017-04-09 03:22:45エラー162.158.79.219 499 GET/HTTP/1.1 0 nginxアクセス

2017-04-09 03:22:45エラー162.158.79.87 499 GET/HTTP/1.1 0 nginxアクセス

2017-04-09 03:22:45エラー162.158.78.170 499 GET/HTTP/1.1 0 nginxアクセス

2017-04-09 03:22:45エラー162.158.78.68 499 GET/HTTP/1.1 0 nginxアクセス

502を示す2番目のエラーの開始

2017-04-09 03:22:45エラー162.158.79.135 502 GET/HTTP/1.1 166 nginxアクセス

2017-04-09 03:22:45エラー162.158.79.225 502 GET/HTTP/1.1 166 nginxアクセス

2017-04-09 03:22:45エラー162.158.78.110 502 GET/HTTP/1.1 166 nginxアクセス

2017-04-09 03:22:45エラー162.158.79.225 502 GET/HTTP/1.1 166 nginxアクセス

そして最後に私はphp-fpm.sock failedエラー

2017-04-09 03:22:45エラー162.158.79.207 20699#0:* 3826365 connect()to unix:///var/www/vhosts/system/playhdpk.top/php-fpm.sock failed(11:リソースは一時的に利用不可)アップストリームnginxエラーへの接続中に

2017-04-09 03:22:45エラー162.158.79.207 20695#0:* 3826367 unix:///var/www/vhosts/system/playhdpk.top/php-fpm.sockへのconnect()が失敗しました(11:リソースは一時的に利用不可)アップストリームnginxエラーへの接続中に

2017-04-09 03:22:45エラー162.158.79.207 20697#0:* 3826369 connect()to unix:///var/www/vhosts/system/playhdpk.top/php-fpm.sock failed(11:リソースは一時的に利用不可)アップストリームnginxエラーへの接続中に

俺の php-fpm-pool-settingsは下にありますが、これはエラーを生成していると思います。

listen.backlog = 65535

;[php-fpm-pool-settings]
pm = dynamic
pm.max_children = 5000
pm.start_servers = 50
pm.min_spare_servers = 20
pm.max_spare_servers = 70
pm.max_requests = 2000

私のnginx confは以下です

user  nginx;
worker_processes 8;

# number of file descriptors used for nginx
# the limit for the maximum FDs on the server is usually set by the OS.
# if you don't set FD's then OS settings will be used which is by default 2000
worker_rlimit_nofile 99999;

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

include /etc/nginx/modules.conf.d/*.conf;

events {

    worker_connections 16192;
    use epoll;
    multi_accept on;
}


http {
    include   mime.types;
    default_type  application/octet-stream;

    open_file_cache max=2048 inactive=20s;
    open_file_cache_valid 30s;
    open_file_cache_min_uses 5;
    open_file_cache_errors off;


    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_requests 100000;
    reset_timedout_connection on;
    client_body_timeout 30;
    send_timeout 15;

    client_header_timeout 12;
    proxy_connect_timeout  600s;
    proxy_send_timeout  600s;
    proxy_read_timeout  600s;

    fastcgi_buffers 8 128k;
    fastcgi_buffer_size 256k;
    fastcgi_send_timeout 600s;
    fastcgi_read_timeout 600s;

    types_hash_max_size 2048;

    gzip on;
    gzip_min_length 1000;
    gzip_proxied expired no-cache no-store private auth;
    gzip_types application/x-javascript text/css application/javascript text/javascript text/plain text/xml application/json application/v$
    gzip_disable "MSIE [1-6]\.(?!.*SV1)";


    server_tokens off;

    include /etc/nginx/conf.d/*.conf;
}

:サーバーの仕様は以下のとおりです

OS CentOS 7.3

プロセッサー:Intel Xeon E5-1620v2-4c/8t-3.7 GHz/3.9 GH

サーバーRAM:64GB DDR3

6
Hassaan

@Artsiomからの回答に永久に反対票を投じることができれば、そうします。

pm.max_children = 4000は、最大4Kのワーカープロセスを意味します。トラフィックがpm.max_requests = 0とともに非常に高速で流れる場合、ワーカーはリサイクルされず、RAMの使用量は時間とともに無制限に増加し、サーバーはメモリ不足の状態になります(ダウン、冷凍)遅かれ早かれ。

スワップの使用状況を監視しながら、PHP-FPMのmax_childrenを慎重に段階的に引き上げる必要があります。

次のような式を使用できます。

pm.max_children = ((total RAM in MB) - (how much MySQL and others take in RAM)) / 80

PHPフレームワークが軽い場合、80 MBはPHP-FPMワーカープロセスの平均重量です。Magento2などの重いものの場合は、代わりに少なくとも128 MBを使用してください。

また、pm.max_requestsは「制限された」値である必要があります。より高いスペックのサーバーでは、実際にそれを増やすことができます(たとえば、10000)。一方、ローエンドのサーバーでは、これを最小(たとえば、500、さらには100)に設定して、RAM "usage"を減らす必要があります。変動。ただし、値0はコード/ PHPおよびそのすべての拡張機能がメモリリークから完全に解放されていることを意味するため、0(無制限)に設定するシナリオはありません。 0に設定しても問題ありません!!!

6

リクエストを制限しないでください。

pm =オンデマンド
 pm.max_children = 4000 
 pm.start_servers = 10 
 pm.min_spare_servers = 10 
 pm.max_requests = 0 
2
Artsiom