我们正在对我们的应用程序进行性能测试。 在测试过程中,我们发现非堆内存和加载类的总数不断增加。非堆内存和加载类的数量不断增加
我们的猜测可能是某些第三方jar或应用程序代码泄漏。
什么是寻找这种泄漏或针指出问题的最佳方法? 任何可以帮助我找到根源的工具?
我们使用的是Jboss EAP 6.1。
我们正在对我们的应用程序进行性能测试。 在测试过程中,我们发现非堆内存和加载类的总数不断增加。非堆内存和加载类的数量不断增加
我们的猜测可能是某些第三方jar或应用程序代码泄漏。
什么是寻找这种泄漏或针指出问题的最佳方法? 任何可以帮助我找到根源的工具?
我们使用的是Jboss EAP 6.1。
通过JDK的jvisualVm首次进行Heap Dump,并使用Memory Analyzer (MAT)进行分析。 http://www.yourkit.com/
的JVM附带了一对夫妇,让你看堆(和与jHat JMAP)的内容工具:
然后在这个方向上头“非堆”看。使用这些可能会让你明白为什么你看到的数量超过预期的加载类数。
我会在尝试查看非堆内存使用情况之前从那里开始。
这听起来像我的代码中的东西可能会不断创建新的动态代理类。我认为这会给你带来你所描述的特征的泄漏。
其他Q & A解释了用于追踪Java存储泄漏的一般技术;例如
我建议你试图找出Class
对象开始。我怀疑你会发现堆内存分配与它们相关联;例如由JIT编译器生成的关联本机代码段。
也可以使用JConsole,它是jvisulavm的较低版本。 –
了解更多,我不确定它可以创建堆转储文件。 – DmitryKanunnikoff
@Dmitry将采取堆转储帮助,因为问题是非堆内存正在增加? – Rips