2012-03-27 5 views

Antwort

10

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

Sie können versuchen, VisualVM, ein Java-Profiler, die mit jedem JDK geht. Sie finden es im Ordner "bin".

+0

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

Verwandte Themen