2014-03-12 74 views
-1

我们正在对我们的应用程序进行性能测试。 在测试过程中,我们发现非堆内存和加载类的总数不断增加。非堆内存和加载类的数量不断增加

我们的猜测可能是某些第三方jar或应用程序代码泄漏。

什么是寻找这种泄漏或针指出问题的最佳方法? 任何可以帮助我找到根源的工具?

我们使用的是Jboss EAP 6.1。

回答

0

的JVM附带了一对夫妇,让你看堆(和与jHat JMAP)的内容工具:

然后在这个方向上头“非堆”看。使用这些可能会让你明白为什么你看到的数量超过预期的加载类数。

我会在尝试查看非堆内存使用情况之前从那里开始。

+0

我一直在使用像appdynamics,jconsole这样的工具,我可以说堆似乎不是一个问题。堆利用率看起来很好,适当的GC cycles.thread计数也stable.Only事情这是一个问题是没有类的总数加载不断增加,这增加了非堆内存使用 – Rips

+0

好的 - 我们在这里获得了我的知识水平,但是如果这些类不在堆中,那么这些类在哪里加载? – DaveH

+0

类被加载到堆外的permgen空间 – Rips

1

这听起来像我的代码中的东西可能会不断创建新的动态代理类。我认为这会给你带来你所描述的特征的泄漏。

其他Q & A解释了用于追踪Java存储泄漏的一般技术;例如

我建议你试图找出Class对象开始。我怀疑你会发现堆内存分配与它们相关联;例如由JIT编译器生成的关联本机代码段。