5

permgen のオーバーフローに問題があります。現在 permgen にロードされているクラスと、それらが使用しているメモリの量を表示するには、どのツールを使用できますか? ありがとう。

4

2 に答える 2

10

大規模なコード ベースを使用しているか、多数の文字列をインターンしている可能性があります。

試してくださいjmap

jmap -permstat <pid>

(注: このpermstatオプションは Windows では使用できません)

例:

$ 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/Launcher$AppClassLoader@0xae7fcfa0
0xdd153c30      0       0         null          live    sun/misc/Launcher$ExtClassLoader@0xae7b0178

total = 3       312     1450096     N/A         alive=3, dead=0     N/A

ヒープをファイルにダンプしてからEclipse Memory Analyzerにロードすることもできます。これにより、Leak Suspects Report や Dominator Tree などの有用な情報が得られます。

jmap -dump:format=b,file=heap.bin 22982

必要に応じて、-XX:MaxPermSizeJVM オプションを使用して PermGen スペースを増やすことができます。

于 2010-09-24T13:23:45.483 に答える
-1

検索対象はプロファイラーのようです。(たとえば、jProfilerまたはオープン ソースの場合: http://java-source.net/open-source/profilers )

于 2010-09-24T12:21:02.607 に答える