2012-03-27 16 views

Odpowiedz

10

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()); 
} 
1

Można spróbować VisualVM, profilera Java, który idzie z każdego JDK. Znajdziesz go w folderze "bin".

+0

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 :) –

Powiązane problemy