permgen のオーバーフローに問題があります。現在 permgen にロードされているクラスと、それらが使用しているメモリの量を表示するには、どのツールを使用できますか? ありがとう。
4835 次
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:MaxPermSize
JVM オプションを使用して PermGen スペースを増やすことができます。
于 2010-09-24T13:23:45.483 に答える
-1
検索対象はプロファイラーのようです。(たとえば、jProfilerまたはオープン ソースの場合: http://java-source.net/open-source/profilers )
于 2010-09-24T12:21:02.607 に答える