2013-08-22 42 views
0

我们的JBoss EDS服务器在生产环境中运行,并且占用大量内存。我们将内存从4GB增加到8GB,并且我们看到内存消耗量仍在逐步增加,最终导致OutOfMemoryError和服务器故障。怀疑是我们的应用程序有内存泄漏。JBoss JMX控制台的对象内存占用空间

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

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

我们还发现服务器正在运行OpenJDK。有没有人看到在OpenJDK上运行JBoss AS的问题? OpenJDK中的垃圾收集算法有多好?

回答

0

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

注:'使用'我的意思是指定使用。

0

我建议你在任何OutOfMemory错误上触发一个堆转储。 + HeapDumpOnOutOfMemoryError和-XX:HeapDumpPath = <路径>在OpenJDK的,你可以通过使用选项-XX启用这个功能。

(查看关于VM Fatal Error Handling的更多信息)。

捕获堆转储后,您可以使用堆转储解析器(如jhat)分析它。