2017-06-13 3 views
0

Ich stoße auf ein Problem und weiß nicht einmal, wie ich mit der Diagnose beginnen soll.Ungewöhnliche intermittierende Seitenlast

Mein aktuelles Server-Setup ist wie folgt;

Ubuntu 16.04, Apache 2.4, PHP7.0-FPM, Mysql 5.6 und Varnish 4.

Apache lauscht auf Port 443 und Varnish lauscht auf Port 80 Anfragen auf Port 443 sind Proxypass zu Varnish auf Port 80 als folgt (vhost snippet).

ProxyPreserveHost On 
ProxyPass/http://127.0.0.1:80/ 
RequestHeader set X-Forwarded-Port "443" 
RequestHeader set X-Forwarded-Proto "https" 
RequestHeader set Ssl-Offloaded 1 

Varnish dient dann statischen Inhalt und gibt alles andere Apache auf Port 8080

PHP-Anfragen von php-fpm gehandhabt werden und wird wie folgt eingestellt (vHost Schnipsel).

<FilesMatch ".+\.ph(p[3457]?|t|tml)$"> 
    SetHandler "proxy:unix:/run/php/php7.0-fpm.sock|fcgi://localhost" 
</FilesMatch> 

Aus irgendeinem Grund, wenn Varnish ist Anforderungen dient, zu laden hin und wieder, wenn die Website surfen, insbesondere dann, wenn ein Produkt in den Warenkorb hinzufügen, wird die Seite zu laden, hängen fast perfekt 60 Sekunden, bevor Sie fortfahren. In den meisten Fällen lädt es sehr schnell. Aber wenn es hängt, zeigen die Apache, Lack, PHP-FPM, MySQL, einschließlich Php-fpm langsamen Logs und mysql langsamen Logs nichts fehlerhaftes.

Ich kann nicht scheinen, den Fehler zu reproduzieren, wenn Varnish deaktiviert ist (alle Anfragen leiten).

Wie kann ich sehen, was die Anfrage oder den Prozess hält?

Ich bin ratlos, wohin ich als nächstes schauen soll?

+0

Verwenden 'curl' Anfragen von der Befehlszeile zu simulieren. Stellen Sie unabhängig voneinander Anforderungen an jeden Punkt in der Pipeline. Verwenden Sie 'time', um die' curl' Anfragen zu synchronisieren. Verwenden Sie F12 in Chrome und klicken Sie mit der rechten Maustaste auf die Netzwerkanforderung, und wählen Sie "Lockenanforderung kopieren", um eine "Curl" -Anforderung zum Einfügen zu erhalten. Ich weiß nicht, was du meinst "Varnish gibt alles an Apache an Port 8080 weiter". Es würde die Proxy-Anfrage von dem Port an Apache zurücksenden, von dem es weitergeleitet wurde. Die Daten gehen zurück zu Apache 443 und zurück zum Client. Apache könnte jeden lokalen zufälligen Port öffnen, um mit Varnish an Port 80 zu kommunizieren. – Chloe

+0

Will PHP php-fpm Logs sowie PHP und httpd Logs überprüfen. Was hat eine 60-Sekunden-Zeitüberschreitung? Wenn es geladen wird, um es zu verursachen, dann kann 'server-status' der Seiten apache und' php-fpm-status' hilfreich sein. – ficuscr

Antwort

0

Es stellte sich heraus, dass es sich um einen Fehler handelte, der sich auf Piping-Post-Anfragen vor der Lackversion 4.1.3 bezog.

Seit Ubuntu 16.04 Repo einen veralteten Varnish 4.1.1 hat, waren wir von dem Fehler betroffen. Die Aktualisierung auf den neuesten Varnish 4.1.6 löste das Problem für uns.

https://github.com/varnishcache/varnish-cache/issues/1806