nginx über Proxy_Pass-Wiederholungsprobleme
高洛峰
高洛峰 2017-05-16 17:23:48
0
1
831

Liebe Meister, mein Nginx wird Tomcat über Proxy_Pass anpassen, aber Tomcat wird zeitweise zucken (fullgc), was zu einer Zeitüberschreitung von etwa 7-8 Sekunden führt

Ich habe mir eine Möglichkeit überlegt, bei der ersten Anfrage eine Zeitüberschreitung festzulegen, z. B. 1 Sekunde. Wenn die Zeit abgelaufen ist, fordern Sie sie einfach erneut an (eine Maschine wechseln)

Dann habe ich die folgende Nginx-Konfiguration (im Folgenden wird der Ruhezustand von Flask verwendet, um Tomcats FullGC zu simulieren)

    upstream up {
        server 127.0.0.1:8088;
        server 127.0.0.1:8089;
    }

    server {
        listen       8087;
        server_name  localhost;
        access_log  logs/host.access.log  main;

        location / {
            proxy_connect_timeout 1s;
            proxy_send_timeout 1s;
            proxy_read_timeout   1s;

            proxy_next_upstream_timeout 1s;
            proxy_next_upstream_tries 1;
            send_timeout 1s;
#            proxy_next_upstream timeout error;
            proxy_pass      http://up;
        }
    }

Die Dienste 8088 und 8089 sind von mir geschriebene Scheindienste
8088 wird direkt für 2 Sekunden in den Ruhezustand versetzt, was zu einer Zeitüberschreitung von Nginx führt
8089 gibt direkt ein „Hallo Welt“ zurück, 200

Meine Erwartung ist
Wenn ich die Befehlszeile verwende, um wiederholt 8087 anzufordern, wird immer „Hallo Welt“ zurückgegeben, obwohl einige Anfragen schneller und andere langsamer sind (mehr als 1 Sekunde, da die Anfrage nach einer Timeout-Anfrage erneut angefordert wird)curl

Aber das Ergebnis ist nicht so

Wenn die Anfrage länger als 1 Sekunde dauert, gibt 8087 direkt einen 504-Fehler zurück

Durch Anzeigen des Nginx-Hintergrundprotokolls:

Es wurden kontinuierlich 3 Timeout-Datensätze gedruckt:

Aber 8088 (der Schlafdienst) hat nur eine Anfrage erhalten (einige kleinere Ausnahmen, in Flaschen geschrieben)

Dann habe ich Wireshark zum Erfassen von Paketen verwendet und es herausgefunden

Kannst du mir helfen?

Stimmt etwas mit meiner Konfiguration nicht??

Hier werden möglicherweise einige irrelevante Informationen bereitgestellt. Wenn sie nicht nützlich sind, können Sie sie ignorieren

Wenn es eine andere gute Lösung für das Tomcat-FullGC-Timeout-Problem gibt, wäre ich auch sehr dankbar~

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

Antworte allen(1)
给我你的怀抱

You asked for one try, then nginx tries that once.

try 和 retry 是不同的。你 proxy_next_upstream_tries 2; 试试。另外你似乎也误解了 proxy_next_upstream_timeout 的意思。把它也去掉。

Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!