Zum Kontext: Wir hatten einige Probleme mit der Speicherbereinigung, die 15 bis 40 Sekunden dauerte. Während dieser Zeit befindet sich die Anwendung im Zustand „angehalten“.
Folgendes sehen wir in den Protokollen unserer Gabage-Sammlung: „Zeiten: Benutzer=0,04, System=0,00, real=14,54 Sek.“
Die Tatsache, dass die Benutzer-/Systemzeiten sehr kurz und die tatsächliche Zeit lang ist (glaube ich), bedeutet, dass die Speicherbereinigung nur eine kurze Zeit in Anspruch nahm, die Anwendung jedoch aus irgendeinem Grund darauf wartete, dass die Threads einen sicheren Punkt erreichten. Wir haben es geschafft, während einer dieser Pausen einen Thread-Dump zu erhalten, und ich hoffe, dass jemand Licht in das bringen kann, was ich hier sehe:
"AsyncAppender-Worker-JVM_ASYNC" #25 daemon prio=5 os_prio=0 tid=0x00007fd8daaa5800 nid=0x4ed5 waiting on condition [0x00007fd90abf2000]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x00000000c1876d30> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObje
"RMI RenewClean-[10.12.113.3:40608]" #21 daemon prio=5 os_prio=0 tid=0x00007fd83401c800 nid=0x4ed2 in Object.wait() [0x00007fd90aff4000]
java.lang.Thread.State: TIMED_WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:142)
- locked <0x00000000c18b23a8> (a java.lang.ref.ReferenceQueue$Lock)
at sun.rmi.transport.DGCClient$EndpointEntry$RenewCleanThread.run(DGCClient.java:536)
at java.lang.Thread.run(Thread.java:745)
"RMI Reaper" #17 prio=5 os_prio=0 tid=0x00007fd8dbfb0000 nid=0x4ece in Object.wait() [0x00007fd90b7f6000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x00000000c0002d00> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:142)
- locked <0x00000000c0002d00> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:158)
at sun.rmi.transport.ObjectTable$Reaper.run(ObjectTable.java:351)
at java.lang.Thread.run(Thread.java:745)