我们让我们的玻璃鱼实例每两周倒下一次。我将Permgen空间增加到512MB,并使用
java.lang.OutOfMemoryError: PermGen space
将内存使用量提高了。两周后,我想出了以下图,其中显示了permgen空间如何稳定增加(x轴上的单元为分钟,y轴为kb)。
jstat -gc
,指出了我们自己的Groovy Code或Groovy本身的某种内存泄漏。我必须指出,Groovy不到相关代码库的1%。
示例输出下面:
jmap -permstats $PID
那么,我如何继续了解有关哪些代码引起的?从本文中,我推断出我们的时髦代码正在动态创建某个地方的类。从JMAP的转储中,我可以看到大多数死对象/类(?)具有相同的parent_loader,尽管我不确定在这种情况下这意味着什么。我不知道如何从这里进行。
addendum
对于后来者来说,值得指出的是,accect的答案无法解决问题。它只是通过不存储太多的课堂信息而重新启动十倍之前,在重新启动之前延长了所需的时间。实际解决的问题是摆脱生成的代码。我们使用了验证(通过合同设计)框架
voval,其中一个人可以使用Groovy作为方法和类的注释来自定义约束。取消注释以明确的Java中明确的前后条件很无聊,但完成了工作。我怀疑每次检查椭圆形约束时,都会创建一个新的匿名类,并以某种方式导致内存泄漏。
我们有类似的问题(两次崩溃之间1周)。 麻烦似乎是那种令人愉悦的caches meta方法。 我们最终根据this讨论