Tomcat exécutera fullgc de temps en temps. Si nginx envoie une requête à ce moment-là, la requête expirera.
Une solution consiste à définir un délai d'attente plus court du côté de nginx. S'il n'y a pas de réponse, changez de machine pour renvoyer la demande. Cependant, le problème est que cette demande est un effet secondaire et ne peut pas se reproduire.
Je voudrais demander s'il existe un mécanisme par lequel nginx supprime automatiquement Tomcat avant gc, puis le rajoute automatiquement une fois gc terminé ?En bref, c'est pour éviter l'impact du timeout causé par Tomcat gc~
PS :
L'amont de nginx est configuré avec plusieurs tomcats Tant qu'un gc se produit sur une machine, toutes les requêtes tombant sur cette machine expireront.
.
Tomcat dispose d'un écouteur pour éviter les débordements de mémoire :
Je soupçonne que cela est dû à l'ajustement de System.gc(), et ce GC utilise peut-être la méthode stop the world, ce qui signifie qu'il n'est pas simultané. Vous pouvez essayer les deux options suivantes :
1.-XX:+ExplicitGCInvokesConcurrent GC
.2 Désactivez l'écouteur ou désactivez les appels directs depuis le niveau JVM -XX:+DisableExplicitGC
Ensuite, observez pendant un moment.