Java 非堆内存和加载类的数量不断增加

Java 非堆内存和加载类的数量不断增加,java,performance,memory-leaks,profiling,jboss7.x,Java,Performance,Memory Leaks,Profiling,Jboss7.x,我们正在对我们的应用程序进行性能测试。 在测试过程中,我们发现非堆内存和加载类的总数随着时间的推移不断增加 我们猜测可能有第三方jar或应用程序代码泄漏 找到此类泄漏或定位问题的最佳方法是什么? 有什么工具可以帮我找到根本原因吗 我们正在使用Jboss EAP 6.1。使用JDK中的jvisualVm进行第一次堆转储,并使用进行分析 然后在标题“Non Heap”中看到这个方向:JVM附带了两个工具,可以让您查看堆的内容(jhat和jmap)。使用这些可以让您了解为什么您看到的加载类数量超过了预

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

我们猜测可能有第三方jar或应用程序代码泄漏

找到此类泄漏或定位问题的最佳方法是什么? 有什么工具可以帮我找到根本原因吗


我们正在使用Jboss EAP 6.1。

使用JDK中的jvisualVm进行第一次堆转储,并使用进行分析


然后在标题“Non Heap”中看到这个方向:

JVM附带了两个工具,可以让您查看堆的内容(jhat和jmap)。使用这些可以让您了解为什么您看到的加载类数量超过了预期数量


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

在我看来,代码中的某些内容可能会不断创建新的动态代理类。我认为这会让你泄露你所描述的特征

其他问答解释了追踪Java存储泄漏的一般技术;e、 g


我建议您首先尝试识别
对象。我猜想您会发现堆外内存分配与它们相关;e、 g.由JIT编译器生成的关联本机代码段。

JConsole也是可以使用的,它是jvisulavm的较低版本。了解更多信息,我不确定它是否可以创建堆转储文件。@Dmitry将获取堆转储帮助,因为非堆内存问题正在增加?是,但是JConsole将为类的加载和卸载提供一个很好的折线图,一行表示总数(包括重复项),另一行表示没有重复项。使用yourkit,我能够找到动态创建的类…我一直在使用appdynamics之类的工具,jconsole和我可以说堆似乎不是一个问题。堆利用率在适当的GC周期内看起来很好。线程数也很稳定。唯一值得关注的是加载的类总数不断增加,这增加了非堆内存使用量。我们在这里通过了我的知识水平,但是,如果这些类不在堆上,它们将被加载到哪里呢?类加载在堆外的permgen空间中。我认为这是另一个参数——permgen可以很容易地被视为堆的一个特殊部分。jmap-permgen将向您显示permgen的内容-这仍然是我的起点。