recherche

Maison  >  Questions et réponses  >  le corps du texte

nginx à propos des problèmes de nouvelle tentative proxy_pass

Chers maîtres, mon nginx ajustera Tomcat via proxy_pass, mais Tomcat convulsera par intermittence (fullgc), provoquant un délai d'attente d'environ 7 à 8 secondes

J'ai pensé à un moyen de définir un délai d'attente lors de la première demande, par exemple 1 s, s'il expire, il suffit de le demander à nouveau (changer de machine)

.

Ensuite, j'ai la configuration nginx suivante (ce qui suit utilise le sommeil de flask pour simuler le fullgc de Tomcat)

    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;
        }
    }

Les services du 8088 et du 8089 sont des services simulés écrits par moi
8088 va directement dormir pendant 2 secondes, provoquant l'expiration de nginx
8089 renverra directement un "hello world", 200

Mon attente est
Lorsque j'utilise la ligne de commande pour demander à plusieurs reprises 8087, "hello world" sera toujours renvoyé bien que certaines requêtes soient plus rapides et d'autres plus lentes (plus de 1 s, car la requête est redemandée après une demande de délai d'attente)curl

Mais le résultat n'est pas comme ça

Lorsque la requête dépasse 1 seconde, 8087 renverra directement une erreur 504

En consultant le journal d'arrière-plan nginx :

3 enregistrements de timeout ont été imprimés en continu :

Mais le 8088 (le service sommeil) n'a reçu qu'une seule demande (quelques exceptions mineures, écrites en flacon)

Ensuite, j'ai utilisé WireShark pour capturer des paquets et j'ai découvert

Pouvez-vous m'aider ?

Y a-t-il un problème avec ma configuration ??

Il se peut que des informations non pertinentes soient fournies ici. Si elles ne sont pas utiles, vous pouvez les ignorer~

S'il existe une autre bonne solution au problème de délai d'attente de Tomcat Fullgc, je serais également très reconnaissant ~

高洛峰高洛峰2749 Il y a quelques jours855

répondre à tous(1)je répondrai

  • 给我你的怀抱

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

    Vous avez demandé un essai, puis nginx l'essaie une fois.

    essayer et réessayer sont différents. Vous essayez proxy_next_upstream_tries 2 ;. De plus, vous semblez avoir mal compris la signification de proxy_next_upstream_timeout. Supprimez-le également.

    répondre
    0
  • Annulerrépondre