Wie kann Tomcat vor dem GC automatisch aus dem Nginx-Upstream entfernt werden, um eine Zeitüberschreitung zu vermeiden?
为情所困
为情所困 2017-05-16 17:21:13
0
1
590

Tomcat führt von Zeit zu Zeit FullGC aus. Wenn Nginx zu diesem Zeitpunkt eine Anfrage sendet, kommt es zu einer Zeitüberschreitung der Anfrage.

Eine Lösung besteht darin, eine kürzere Zeitüberschreitung auf der Nginx-Seite festzulegen, die Maschine so zu ändern, dass sie die Anfrage erneut sendet. Das Problem besteht jedoch darin, dass diese Anfrage nicht erneut erfolgen darf

Ich möchte fragen: Gibt es einen Mechanismus, mit dem Nginx Tomcat automatisch vor GC entfernt und es nach Abschluss von GC automatisch wieder hinzufügt?

Kurz gesagt, es geht darum, die durch Tomcat GC verursachten Timeout-Auswirkungen zu vermeiden

PS:

Der Upstream von nginx ist mit mehreren Tomcats eingerichtet. Solange ein GC auf einem Computer auftritt, kommt es bei allen auf diesem Computer eingehenden Anfragen zu einer Zeitüberschreitung.

为情所困
为情所困

Antworte allen(1)
淡淡烟草味

tomcat有个防止内存溢出的监听器:

org.apache.catalina.core.JreMemoryLeakPreventionListener

我怀疑是它调System.gc()导致的,而这种GC可能是用的stop the world方式,也就是说是非并发的。你可以试一下下面两种方案:

1.-XX:+ExplicitGCInvokesConcurrent 并发GC
2.停用该监听器或者从JVM级别禁用直接调用-XX:+DisableExplicitGC

然后观察一段时间吧。

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!