我们在生产中运行JBoss EDS服务器并且它消耗了大量内存。我们将内存从4GB增加到8GB,我们看到内存消耗仍在逐渐增加,最后OutOfMemoryError和服务器出现故障。怀疑是我们的应用程序中存在内存泄漏。
我们希望看到可能导致此问题的原因?我们可以访问JMX控制台,我们在线程中看不到可能导致此问题的任何内容。我们希望看到哪些对象正在增长以及它们正在使用多少内存。 JMX控制台如何在这方面帮助我?
我发现JBoss内存分析器可以提供帮助,但服务器没有在生产实例上安装分析器。显然,我们无法安装它并在生产中重新启动。它会产生后果。
我们还发现服务器正在运行OpenJDK。有没有人在OpenJDK上看到任何运行JBoss AS的问题? OpenJDK中的垃圾收集算法有多好?
答案 0 :(得分:1)
我建议您在任何OutOfMemory错误上触发堆转储。在OpenJDK中,您可以使用选项 -XX:+ HeapDumpOnOutOfMemoryError 和 -XX:HeapDumpPath = &lt; pathname&gt; <来启用此功能/ em>的。
(查看有关VM Fatal Error Handling的更多信息)。
捕获堆转储后,可以使用像jhat这样的堆转储解析器对其进行分析。
答案 1 :(得分:0)
JBoss将消耗所有可用内存。如果你给它更多,它将使用更多。除非这会导致一些内存异常,否则这不是什么大问题。
注意:“使用”是指使用专用标记。