1

我们有 JBoss EDS 服务器在生产中运行,它正在消耗大量内存。我们将内存从 4GB 增加到 8GB,我们看到内存消耗仍在逐步增加,最后出现 OutOfMemoryError 和服务器宕机。怀疑是我们的应用程序存在内存泄漏。

我们想看看是什么导致了这个问题?我们可以访问 JMX 控制台,并且在线程中看不到任何可能导致此问题的内容。我们想看看哪些对象正在增长以及它们使用了多少内存。JMX 控制台在这方面如何帮助我?

我发现 JBoss 内存分析器可以提供帮助,但服务器没有在生产实例上安装分析器。显然,我们无法在生产中安装并重新启动。它会产生后果。

我们还发现服务器正在运行 OpenJDK。有人见过在 OpenJDK 上运行 JBoss AS 的任何问题吗?OpenJDK 中用于垃圾收集的算法有多好?

4

2 回答 2

1

我建议您在任何 OutOfMemory 错误时触发堆转储。在 OpenJDK 中,您可以使用选项-XX:+HeapDumpOnOutOfMemoryError-XX:HeapDumpPath=启用此功能<路径名>

(请参阅有关VM 致命错误处理的更多信息)。

捕获堆转储后,您可以使用jhat之类的堆转储解析器对其进行分析。

于 2013-08-22T14:51:49.803 回答
0

JBoss 将消耗所有可用内存。如果你给它更多,它会使用更多。除非这会导致一些内存异常,否则这没什么大不了的。

注意:“使用”是指指定用途。

于 2013-08-22T01:20:09.700 回答