如何分析彼尔姆基因的内容?

2022-09-01 18:32:32

我想得到一个PermGen的转储,看看它为什么填满。有没有办法分析这一点?我已经知道了log4j,tomcat webapp重新加载等常见嫌疑人,但我的应用程序中也有一些自定义代理生成代码,只是想看看引擎盖下。

这有可能吗?


答案 1

PermGen 通常由字符串文本池和加载的类组成。为了回答部分问题,即字符串文本池,我编写了一个实用程序来打印正在运行的JVM的字符串文本池。可在此处获取:

https://github.com/puneetlakhina/javautils/blob/master/src/com/blogspot/sahyog/PrintStringTable.java

它基于PermStat,这是用于通过jmap工具打印permgen统计数据的类。


答案 2

您可以使用以下标志:

-XX:+TraceClassLoading -XX:+TraceClassUnloading

它们在从永久生成加载/卸载类时打印类的标识。如果添加,您还可以跟踪烫发器的大小。-XX:+PrintGCDetails

请注意,我不确定这些标志在Sun以外的JVM中是否受支持。

PermGen内存不足错误的另一个嫌疑人是字符串暂存。检查代码中插入字符串的位置。


推荐