web-dev-qa-db-fra.com

php-fpm.sock a échoué (11: ressource temporairement indisponible) lors de la connexion à l'amont

Je suis empilé avec les erreurs suivantes sur mon site lorsque je teste 200 visites par seconde.

J'ai d'abord reçu 499 erreurs

2017-04-09 03:22:45 Erreur 162.158.79.219 499 Accès GET/HTTP/1.1 0 nginx

2017-04-09 03:22:45 Erreur 162.158.79.87 499 Accès GET/HTTP/1.1 0 nginx

2017-04-09 03:22:45 Erreur 162.158.78.170 499 Accès GET/HTTP/1.1 0 nginx

2017-04-09 03:22:45 Erreur 162.158.78.68 499 Accès GET/HTTP/1.1 0 nginx

2ème erreur, début montrant 502

2017-04-09 03:22:45 Erreur 162.158.79.135 502 GET/HTTP/1.1 166 accès nginx

2017-04-09 03:22:45 Erreur 162.158.79.225 502 Accès GET/HTTP/1.1 166 nginx

2017-04-09 03:22:45 Erreur 162.158.78.110 502 GET/HTTP/1.1 166 accès nginx

2017-04-09 03:22:45 Erreur 162.158.79.225 502 Accès GET/HTTP/1.1 166 nginx

et enfin je commence à recevoir php-fpm.sock failed les erreurs

2017-04-09 03:22:45 Erreur 162.158.79.207 20699 # 0: * 3826365 connect () à unix: ///var/www/vhosts/system/playhdpk.top/php-fpm.sock a échoué (11: Ressource temporairement indisponible) lors de la connexion à l'erreur nginx en amont

2017-04-09 03:22:45 Erreur 162.158.79.207 20695 # 0: * 3826367 connect () à unix: ///var/www/vhosts/system/playhdpk.top/php-fpm.sock a échoué (11: Ressource temporairement indisponible) lors de la connexion à l'erreur nginx en amont

2017-04-09 03:22:45 Erreur 162.158.79.207 20697 # 0: * 3826369 connect () à unix: ///var/www/vhosts/system/playhdpk.top/php-fpm.sock a échoué (11: Ressource temporairement indisponible) lors de la connexion à l'erreur nginx en amont

Ma php-fpm-pool-settings sont en dessous, je crois que celui-ci génère des erreurs puis-je me tromper

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

Mes nginx conf sont ci-dessous

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;
}

Remarque: les spécifications du serveur sont ci-dessous

OS CentOS 7.3

Processeur: Intel Xeon E5-1620v2 - 4c/8t - 3,7 GHz/3,9 GH

Sever Ram: 64 Go DDR3

6
Hassaan

Si je pouvais déprécier la réponse de @Artsiom pour toujours, je le ferais.

pm.max_children = 4000 signifie jusqu'à 4K processus de travail. Si le trafic circule très rapidement et avec pm.max_requests = 0, les travailleurs ne sont jamais recyclés, l'utilisation de RAM augmentera indéfiniment avec le temps et le serveur sera en état de mémoire insuffisante (arrêté, gelé) tôt ou tard.

PHP-FPM max_children doit être élevé avec précaution et progressivement tout en surveillant l'utilisation du swap.

Vous pouvez utiliser une formule semblable à la suivante:

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

Où 80 Mo est le poids moyen d'un processus de travail PHP-FPM si votre framework PHP est léger. Pour les choses lourdes comme Magento 2, prenez au moins 128 Mo à la place.

Et le pm.max_requests devrait avoir une valeur "limitée". Dans les serveurs de spécifications supérieures, vous pouvez en effet augmenter (10000, par exemple), tandis que sur les serveurs bas de gamme, cela devrait être réglé sur le plus petit (par exemple 500, voire 100) pour réduire RAM "utilisation" Mais sans scénario, je le mettrais à 0 (illimité) car une valeur de 0 implique que votre code/PHP et toutes ses extensions sont absolument exempts de fuites de mémoire. serait bien d'être mis à 0 !!!

6
Danila Vershinin

Ne limitez pas les demandes Donnez-leur du travail gratuitement)

pm = ondemand 
 pm.max_children = 4000 
 pm.start_servers = 10 
 pm.min_spare_servers = 10 
 pm.max_requests = 0 
2
Artsiom