如何提高Jboss使用的内存量?

问题描述:

我有一个运行在jboss-5.0.0.GA上的Java EE应用程序。该应用程序使用BIRT报告工具生成多个报告。如何提高Jboss使用的内存量?

该服务器有4个2.4 Ghz和8 Gb的内核。

启动脚本使用下一个选项:

-Xms2g -Xmx2g -XX:MaxPermSize=512m 

的应用已经达到了一定的稳定性与此配置,我前一段时间有很多,因为内存的崩溃是完全充分。

Rigth现在,应用程序没有崩溃,但内存总是被完全使用。顶部命令的 示例:

Mem: 7927100k total, 7874824k used, 52276k free 

的java程序示出了使用2.6克的,并且这是该服务器上运行的唯一的应用程序。

我能做些什么来确保大量的可用内存?

我该怎么做才能找到内存泄漏?

还有其他建议吗?

TIA


总部设在答复mezzie:

如果您使用的是Linux的内核 确实与记忆是什么 与Windows的工作不同。在linux下,它会尝试用完所有的内存。在它使用了所有东西之后,它将 回收内存 进一步使用。这不是内存 泄漏。我们还在我们的 linux服务器上安装了jboss tomcat,我们在这个问题上做了一些研究,并且在 的问题上。

我发现了更多这方面的信息,

https://serverfault.com/questions/9442/why-does-red-hat-linux-report-less-free-memory-on-the-system-than-is-actually-ava

http://lwn.net/Articles/329458/

很好,一半的内存缓存:

   total  used  free  shared buffers  cached 
Mem:   7741  7690   50   0  143  4469 

如果您使用的是linux,内核对内存的处理方式与Windows的工作方式有所不同。在Linux中,它会尝试使用所有的内存。在它使用了所有东西之后,它将回收内存以供进一步使用。这不是内存泄漏。我们的linux服务器上也有jboss tomcat,我们在这个问题上做了一些研究。

+0

是的,这是一个RHEL 4我没有知道这一点。谢谢 – 2010-11-18 15:55:21

我敢打赌,那些是操作系统MEM值而不是Java mem值。 Java使用高达-Xmx的所有内存,然后开始垃圾收集,从而大大简化了过度简化。使用jconsole查看真正的Java内存使用情况。

为了简单起见,JVM的最大内存量等于MaxPermGen(永久用于JVM运行。它包含类定义,所以它不应该随着服务器的负载而增长)+ Xmx(对象堆的最大大小,其中包含当前在JVM中运行的对象的所有实例)+ Xss(线程堆栈空间,取决于在你的JVM中运行的线程的数量,它可以在大多数时间被服务器限制)+直接内存空间(由-XX设置:MaxDirectMemorySize = xxxx)

所以做数学。如果你想确定你有剩余的空闲内存,你将不得不限制MaxPermGen,Xmx和服务器允许的线程数。

风险是,如果你的服务器上的负载增加,你可以得到一个OutOfMemoryError ...