Ho alcuni problemi con l'overflow permgen. Quali strumenti posso usare per visualizzare quali classi sono ora caricate in permgen e quanta memoria usano? Grazie.Strumento per visualizzare gli oggetti in permgen
risposta
Sembra che quello che cerchi sia un profiler. (ad esempio jProfiler o open source: http://java-source.net/open-source/profilers)
Forse si dispone di una base di codice estesa o si stanno eseguendo internazioni di stringhe.
Prova jmap
:
jmap -permstat <pid>
(Nota: l'opzione permstat
non è disponibile in Windows)
Esempio:
$ jmap -permstat 22982
Attaching to process ID 22982, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 17.0-b16
100691 intern Strings occupying 5641096 bytes.
finding class loader instances ..Finding object size using Printezis bits and skipping over...
done.
computing per loader stat ..done.
please wait.. computing liveness..done.
class_loader classes bytes parent_loader alive? type
<bootstrap> 303 1355992 null live <internal>
0xdd159fe8 9 94104 0xdd153c30 live sun/misc/[email protected]
0xdd153c30 0 0 null live sun/misc/[email protected]
total = 3 312 1450096 N/A alive=3, dead=0 N/A
Si può anche provare il dumping nel mucchio in un file e quindi caricandolo in Eclipse Memory Analyser, che ti fornirà informazioni utili come un report di Leak Suspects e Dominator Tree.
jmap -dump:format=b,file=heap.bin 22982
Se necessario, è possibile aumentare il vostro spazio PermGen utilizzando l'opzione -XX:MaxPermSize
JVM.
L'opzione 'permstat' è ora disponibile su Windows. java version "1.6.0_31" Java (TM) SE Runtime Environment (build 1.6.0_31-b05) Java Server di server a 64 bit HotSpot (build 20.6-b01, modalità mista) – Sydney
Grazie, non riesco a trovare questa opzione in jprofiler – alex543
Puoi puntare qualsiasi profiler che abbia un'opzione per esplorare lo spazio di perm gen. Da quello che imparo, la maggior parte di loro esplora solo l'heap, non lo spazio dei perm gen. –