2012-03-27 15 views

risposta

10

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

Si può provare VisualVM, un profiler Java che va con ogni JDK. Lo troverai nella cartella "bin".

+0

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

Problemi correlati