Come trovare perdite di memoria usando visualvm

Sospetto di avere una perdita di memoria importante nel nostro bridge di connessione ActiveMQ: stiamo osservando i tipici pattern di perdita di memoria (l’app si carica bene, rallenta se viene eseguita per periodi di tempo prolungati o viene riavviata più e più volte per brevi periodi di tempo) . Ho cercato le migliori pratiche moderne per trovare perdite di memoria Java e molti sviluppatori sembrano abbandonare strumenti tradizionali come jhat / jmap al posto del nuovo (er) jvisualvm .

Dopo aver lanciato questo strumento (e trascorrendo alcune ore a leggere sul suo tutorial) sono in grado di prendere istantanee di profiler sia per la CPU che per la memoria.

Sono solo un po ‘bloccato a questo punto – come faccio ad analizzare queste istantanee per identificare la perdita? C’è una pletora di documentazione là fuori su come usare jvisualvm per produrre istantanee, ma pochissima documentazione su come effettivamente capirle.

Grazie in anticipo.

Analizzare la perdita di memoria usando visualvm non è così facile. Ha uno strumento / plugin chiamato ‘sampler’. Questo può essere usato per campionare memoria o CPU. È ansible scattare istantanee a intervalli regolari e cercare possibili perdite. Ecco alcuni dettagli su come usarlo- Ottenuto dalla ricerca rapida

Un modo più efficace sarà quello di ottenere un dump dell’heap (ad esempio quando l’applicazione si è rallentata o quando OOM si verifica ). VisualVM ti aiuta a prendere heapdump (usando il comando Heap Dump nella scheda Monitor )

Questo file può essere analizzato da MAT : alcuni dettagli sono disponibili su Come si analizza un file .hprof? e http://memoryanalyzer.blogspot.in/