Hier ist ein Ausschnitt aus einem Stück Code haben wir in regelmäßigen Abständen, dass die Speichernutzung unserer App protokolliert:
import java.lang.management.GarbageCollectorMXBean
import java.lang.management.ManagementFactory
import java.lang.management.MemoryPoolMXBean
import java.lang.management.MemoryUsage
ManagementFactory.getMemoryMXBean().getHeapMemoryUsage();
log("Heap", ManagementFactory.getMemoryMXBean().getHeapMemoryUsage());
log("NonHeap", ManagementFactory.getMemoryMXBean().getNonHeapMemoryUsage());
List<MemoryPoolMXBean> beans = ManagementFactory.getMemoryPoolMXBeans();
for (MemoryPoolMXBean bean: beans) {
log(bean.getName(), bean.getUsage());
}
for (GarbageCollectorMXBean bean: ManagementFactory.getGarbageCollectorMXBeans()) {
log(bean.getName(), bean.getCollectionCount(), bean.getCollectionTime());
}
Ich kenne VisualVM und habe es verwendet, wenn ich ein Problem aktiv debuggen, wie es passiert. Aber einige Probleme treten bei nächtlichen Läufen auf, was bedeutet, dass ich sie irgendwo aufzeichnen muss, um sie später zu verarbeiten. Ich könnte natürlich die VisualVM-App für die Nacht offen lassen, aber es ist nicht ganz die langfristige Lösung, die ich suche, da Protokolle dauerhaft und für alle Benutzer auf dem System zugänglich und nicht an meinen Computer gebunden sind :) –