suchen

Heim  >  Fragen und Antworten  >  Hauptteil

nginx über Proxy_Pass-Wiederholungsprobleme

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~

高洛峰高洛峰2749 Tage vor853

Antworte allen(1)Ich werde antworten

  • 给我你的怀抱

    给我你的怀抱2017-05-16 17:25:48

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

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

    Antwort
    0
  • StornierenAntwort