插入填充permgen的代码,用死去的groovy代码

问题描述 投票:0回答:1

我们让我们的玻璃鱼实例每两周倒下一次。我将Permgen空间增加到512MB,并使用

java.lang.OutOfMemoryError: PermGen space
将内存使用量提高了。两周后,我想出了以下图,其中显示了permgen空间如何稳定增加(x轴上的单元为分钟,y轴为kb)。


Graph of increasing PermGen usage我试图搜索搜索某种分析工具,该工具可以查明错误和在此处提到的JMAP上的线程,事实证明这很有帮助。在大约14000行中,大约有12500条包含

jstat -gc

,指出了我们自己的Groovy Code或Groovy本身的某种内存泄漏。我必须指出,Groovy不到相关代码库的1%。

示例输出下面:
jmap -permstats $PID

那么,我如何继续了解有关哪些代码引起的?

从本文中,我推断出我们的时髦代码正在动态创建某个地方的类。从JMAP的转储中,我可以看到大多数死对象/类(?)具有相同的parent_loader,尽管我不确定在这种情况下这意味着什么。我不知道如何从这里进行。
addendum

对于后来者来说,值得指出的是,accect的答案无法解决问题。它只是通过不存储太多的课堂信息而重新启动十倍之前,在重新启动之前延长了所需的时间。实际解决的问题是摆脱生成的代码。我们使用了验证(通过合同设计)框架

voval

,其中一个人可以使用Groovy作为方法和类的注释来自定义约束。取消注释以明确的Java中明确的前后条件很无聊,但完成了工作。我怀疑每次检查椭圆形约束时,都会创建一个新的匿名类,并以某种方式导致内存泄漏。

我们有类似的问题(两次崩溃之间1周)。 麻烦似乎是那种令人愉悦的caches meta方法。 我们最终根据this讨论

bug报告使用了此代码

groovy/lang/GroovyClassLoader$InnerLoader

java memory-leaks profiling permgen jmap
1个回答
3
投票

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.