Oto urywek z kawałka kodu mamy, które okresowo rejestruje zużycie pamięci naszej aplikacji:
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());
}
Znam VisualVM i użyłem go, gdy aktywnie debuguję problem, jak to się dzieje. Ale niektóre problemy pojawiają się podczas nocnych przejazdów, co oznacza, że muszę je gdzieś zalogować, aby później je przetworzyć. Mogę oczywiście pozostawić aplikację VisualVM otwartą na noc, ale nie jest to rozwiązanie długoterminowe, ponieważ logi są trwałe i dostępne dla wszystkich użytkowników w systemie i nie są związane z moim komputerem :) –