2011-02-08 4 views
6

Sto provando a determinare se ho una perdita di memoria nella mia webapp. Sto usando VisualVM e JMeter per caricare test e guardare l'heap.Eclipse Memory Analyzer - Il rapporto Sospetti perdite non punta alle classi MY - perché?

Ho salvato un dump di heap su file e scaricato Eclipse Memory Analyzer ieri ... dopo molte frustrazioni con VisualVM, ho pensato che Eclipse avrebbe individuato la perdita, se esistente, migliore di VisualVM.

Ho aperto il file heap in Eclipse e ho eseguito quello che chiamano un rapporto di sospetti di perdita. Ho pensato che avrebbe puntato a una classe particolare nella mia webapp, ma non è così. Quindi non ho idea di come usare le informazioni fornite al fine di scoprire dove sia in una particolare classe di mine il sospetto di perdita.

Ecco i risultati del report di Leak Suspect per uno dei miei file di heap.

 
One instance of "org.apache.catalina.session.StandardManager" loaded by "org.apache.catalina.loader.StandardClassLoader @ 0x261bdac0" occupies 16,977,376 (48.54%) bytes. The memory is accumulated in one instance of "java.util.concurrent.ConcurrentHashMap$Segment[]" loaded by "". 


Keywords 
org.apache.catalina.loader.StandardClassLoader @ 0x261bdac0 
org.apache.catalina.session.StandardManager 
java.util.concurrent.ConcurrentHashMap$Segment[] 

Il resto dei Dettagli nel rapporto è come mostrato nell'immagine allegata. Spero che l'immagine può essere espansa per uno sguardo più da vicino .... enter image description here

So che Eclipse si suppone che sia davvero un buon software. Questo è il mio ultimo tentativo di usare qualcosa del genere per trovare una perdita di memoria - ho solo una conoscenza molto, molto limitata in COME questo software può essere usato per tale. Tutorial e pagine di aiuto descrivono le cose come se dovessi sapere cosa fare dopo pochi click ... Ho bisogno di più aiuto di così.

risposta

3

Mentre non ho alcuna esperienza con l'utilizzo di Eclipse per trovare le perdite, vorrei prima fare una domanda: quanto sei sicuro di avere una perdita di memoria? Dalla tua domanda, non sembra che tu sia sicuro di avere una perdita, ma stai testando per vedere se ne hai uno. Il modo più semplice per testare l'avvio della tua applicazione, notare quanta memoria sta consumando, avere JMeter colpirlo continuamente per 24 ore e vedere quanta memoria sta consumando (probabilmente dopo l'esecuzione di GC). Se la tua applicazione sta consumando una parte significativa della memoria o è morta da un OutOfMemoryError, allora hai una perdita di memoria.

Se si riscontra effettivamente una perdita di memoria, in primo luogo suggerirei di eseguire l'applicazione tramite FindBugs per vedere se riesce a trovare le perdite di memoria attraverso un'analisi statica rapida. Se ciò non funziona, allora this article (anche se è piuttosto vecchio) potrebbe aiutarti a capire i risultati che ti hanno dato Eclipse.