1. Description du problème
Nginx est utilisé pour implémenter le routage et le transfert entre les systèmes internes.
Mais récemment, j'ai découvert qu'il existe un système qui signale souvent des erreurs 502, atteignant des centaines de fois par jour, ce qui est complètement insupportable.
2. Enquête sur les causes
J'ai donc vérifié et découvert que le personnel de configuration comprenait l'unité du délai d'expiration de la connexion ( server.tomcat.connection-timeout
) en secondes, alors qu'il s'agissait en réalité de millisecondes.
Une partie de la configuration de SpringBoot est la suivante :
# Tomcat
server:
tomcat:
uri-encoding: UTF-8
max-threads: 1000
min-spare-threads: 30
connection-timeout: 60 # 错误在这里
port: 18080
servlet:
context-path: /
max-http-header-size: 102400
La valeur de configuration d'origine est que 60
si le GC est rencontré pendant le processus d'établissement de la connexion client et que le temps de pause du GC atteint plus de 60 ms au total, Tomcat verra qu'il expire, ce qui entraînera la connexion. ne parvient pas à être établi, puis Nginx donnera au client une erreur 502.
3. Solutions
Modifiez le délai d'expiration de la connexion, par exemple, modifiez-le en 【server.tomcat.connection-timeout=6000
】, comme indiqué ci-dessous :
# Tomcat
server:
tomcat:
uri-encoding: UTF-8
max-threads: 1000
min-spare-threads: 30
connection-timeout: 6000
port: 18080
servlet:
context-path: /
max-http-header-size: 102400
problème résolu.
Bien entendu, l'erreur 502 ne se limite pas à cette raison et le lien Nginx doit être vérifié.
Auteur : https://renfufei.blog.csdn.net/
Heure : 2 septembre 2020