Ressource vorübergehend nicht verfügbar, während eine Verbindung zum Upstream hergestellt wird (php5-fpm)

7

Ich erhalte diesen Fehler häufig auf zufälligen Seiten, wenn die Verbindungen ~ + 10K sind (netstat -an | grep 80 | wc -l). Dies geschieht, solange noch + 10 GB freier Speicher vorhanden sind und die Serverlast weniger als 3 beträgt.

Meine relevanten Konfigurationen:

/etc/php5/fpm/php.ini

memory_limit = 1024M
default_socket_timeout = 120

/etc/php5/fpm/pool.d/www.conf

pm = dynamic 
pm.max_children = 30 
pm.start_servers = 5
pm.min_spare_servers = 2 
pm.max_spare_servers = 5 
;pm.max_requests =20000 #uncommented with any value didn't fixed
request_terminate_timeout = 120s

Ich habe auch die oben genannten Werte (dh 60 Kinder, 10 Starts, 10 maximale Server) ohne Erfolg verdoppelt.

/etc/nginx/nginx.conf

worker_connections 4024;
keepalive_timeout 10;

Nginx selbst hinter Varnish und memcached ist aktiviert. Das Rendern von Seiten ist im Allgemeinen ziemlich schnell.

Dies scheint ein recht häufiges Problem zu sein. Ich konnte keine hilfreiche Lösung oder Analyse der möglichen Ursachen finden. Ihre Hinweise / Lösungen werden daher sehr geschätzt.

Alfish
quelle

Antworten:

8

Leider ist es schwierig, diese Frage ohne weitere Einzelheiten eindeutig zu beantworten.

Ich habe allerdings ein paar Vermutungen:

Meine erste Vermutung ist, dass Ihre PHP5-Fpm-Worker-Sockets zu wenig Listen-Backlog für Ihre Last haben. Die Länge der Backlog-Warteschlange beträgt unter Linux standardmäßig 128.

Um es zu erhöhen, sollten Sie:

  1. Erhöhen Sie den net.core.somaxconnsysctl-Wert.
  2. Erhöhen Sie listen.backlogKonfigurationseinstellung php5-fpm.

Sie können beispielsweise versuchen, beide auf 2048 zu erhöhen, um festzustellen, ob dies hilfreich ist.

Meine zweite Vermutung ist das maximale Limit für offene Dateideskriptoren pro Prozess der Nginx-Worker. Der richtige Weg, um es zu erhöhen, hängt von Ihrer Verteilung ab. Unter Ubuntu / Debian sollten Sie sich die Konfigurationseinstellungen für /etc/default/nginxDateien und worker_rlimit_nofileNginx ansehen .

einrasten
quelle
Kennen Sie eine Möglichkeit, um zu überprüfen, ob beispielsweise der Listen-Backlog voll ist?
SimonSimCity