Ecco un frammento da un pezzo di codice che abbiamo che registra periodicamente l'utilizzo della memoria della nostra applicazione:
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());
}
fonte
2012-03-27 10:26:42
Conosco VisualVM e l'ho usato per quando eseguo attivamente il debug di un problema mentre sta accadendo. Ma alcuni problemi si verificano durante le corse notturne, il che significa che ho bisogno di registrarli da qualche parte per elaborarli in seguito. Ovviamente potrei lasciare aperta l'app VisualVM per la notte, ma non è proprio la soluzione a lungo termine che sto cercando, poiché i registri sono permanenti e accessibili a tutti gli utenti del sistema e non sono collegati al mio computer :) –