Wir betreiben viele Tomcat-Server und haben beobachtet, dass volle Speicherbereinigungen (GCs) oft stündlich durchgeführt werden, insbesondere wenn die Speicherauslastung relativ gering ist. Die genaue Uhrzeit scheint relativ zu der Zeit zu sein, zu der der Anwendungsserver gestartet wurde. Wenn ein Server um 01:13 Uhr gestartet wird, wird um 02:13 Uhr ein vollständiger GC durchgeführt, und der nächste vollständige GC wird um 03:13 Uhr stattfinden. Ich konnte keine Dokumentation finden, um dieses Verhalten zu erklären.Warum führt die JVM dieser Tomcat-Server stündlich einen vollständigen GC aus?
Dies ist ein Problem, da ein Serverpool gleichzeitig gestartet wird. Alle neigen dazu, ungefähr zur gleichen Zeit vollständige GCs auszuführen. Wenn die GC-Verzögerung lang genug ist, damit ein Load-Balancer einen Server als inaktiv markiert, kann die gesamte Anwendung für einige Zeit offline gehen. Es wäre besser, wenn die vollständigen GCs über einen Zeitraum verteilt werden könnten, so dass keine zwei Server gleichzeitig einen vollständigen GC ausführen, aber ich kann keinen Weg finden, dieses Verhalten zu kontrollieren.
Hat jemand anderes dieses Verhalten gesehen? Gibt es eine Möglichkeit zu beeinflussen, wenn diese "normalen" vollständigen GCs passieren?
Haben Sie einen Prozess, der sich auf einen Zeitplan läuft (über Quartz, et al.), Die erfüllete den Haufen regelmäßig aufmachen? –