2016-07-04 4 views
1

Ich habe php-fpm & Nginx-Stack auf meinem Server installiert.Nginx PHP-FPM und Curl hängt nachfolgenden Browser zu Serveranforderungen

Ich benutze eine JS-App, die eine AJAX-Anfrage auslöst, die sich intern mit einem Drittanbieter-Dienst verbindet, der curl verwendet. Dieser Service benötigt eine lange Zeit, um etwa 150 Sekunden zu antworten.

Nun, wenn ich mit der gleichen Seite auf einem anderen Browser-Tab verbinden, gibt es nicht einmal den Javascript-Code auf der Seite, die die Ajax-Anfragen auslöst. Grundsätzlich werden alle nachfolgenden Anfragen solange geladen, bis entweder die Curl Antwort oder Timeouts zurückgibt.

Hier habe ich Proxy_read_timeout auf 300 Sekunden eingestellt.

Ich möchte wissen, warum Nginx die Ressource hält und andere Clients nicht bedient.

+1

Wie viele PHP5-FPM-Mitarbeiter haben Sie ausgeführt? Wird die JS-Anwendung auch von einem PHP-Skript zurückgegeben? Wie sieht Ihre NGINX-Konfiguration aus? – SArnab

+0

Die Js Anwendung wird aus einem PHP-Skript zurückgegeben Es gibt 4 php-fpm Arbeiter –

+0

nginx conf worker_connection 1024 worker_processes 5 sendfile auf; tcp_nopush an; tcp_nodelay on; keepalive_timeout 65; –

Antwort

1

Das Problem lag an der PHP-Sitzungssperre. Wenn ich eine bestimmte Anfrage machte, sperrte PHP die Sitzungsdatei und gab sie erst frei, nachdem die Anfrage abgeschlossen war. Um dies zu vermeiden, können Sie session_write_close() verwenden. In meinem Fall habe ich eine Redis-Sitzung implementiert.

Problem gelöst !!!

+1

Gut zu wissen! Wie hast du das entdeckt – SArnab

+0

Ich habe eine PHP-Seite erstellt und Schlaf (100) hinzugefügt. Während dies ausgeführt wurde, habe ich dieselbe URL auf der nächsten Registerkarte angefordert, die das Ergebnis zurückgab. Dies veranlasste mich, session_start() vor dem Schlaf (100) hinzuzufügen. –