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

Java 如何提高Jboss使用的内存量?,java,linux,jboss,redhat,Java,Linux,Jboss,Redhat,我有一个运行在jboss-5.0.0.GA上的JavaEE应用程序。应用程序使用BIRT报告工具生成多个报告 该服务器有4个2.4 Ghz的内核和8 Gb的ram 启动脚本正在使用以下选项: -Xms2g -Xmx2g -XX:MaxPermSize=512m 通过这种配置,应用程序已经达到了一定的稳定性。不久前,由于内存完全满,我遇到了很多崩溃 现在,应用程序没有崩溃,但内存总是被充分利用。 top命令示例: Mem: 7927100k total, 7874824k used,

我有一个运行在jboss-5.0.0.GA上的JavaEE应用程序。应用程序使用BIRT报告工具生成多个报告

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

启动脚本正在使用以下选项:

 -Xms2g -Xmx2g -XX:MaxPermSize=512m
通过这种配置,应用程序已经达到了一定的稳定性。不久前,由于内存完全满,我遇到了很多崩溃

现在,应用程序没有崩溃,但内存总是被充分利用。 top命令示例:

Mem:   7927100k total,  7874824k used,    52276k free
java进程显示了2.6g的使用,这是该服务器上运行的唯一应用程序

我可以做些什么来确保一定数量的可用内存

我可以做些什么来查找内存泄漏

还有其他建议吗

短暂性脑缺血发作


根据mezzie的回答:


如果您使用的是linux,那么 内核与内存的关系是什么 与windows的工作方式不同。在里面 linux,它将尝试使用所有 记忆。在它使用了所有东西之后,它 然后,将循环使用内存进行存储 进一步使用。这不是记忆 泄漏。我们的手机上也有JBossTomcat 我们对linux服务器进行了研究 这个问题很久以前就有了

我找到了更多关于这个的信息

那么,一半的内存是缓存的:

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

我打赌这些是操作系统mem值,而不是javamem值。Java使用了-Xmx之前的所有内存,然后开始进行垃圾收集,大大简化了操作。使用jconsole查看Java内存的实际使用情况。

如果您使用的是linux,内核对内存的处理方式与windows的工作方式不同。在linux中,它将尝试用尽所有内存。在使用完所有内容后,它将回收内存以供进一步使用。这不是内存泄漏。我们的linux服务器上也有jboss tomcat,不久前我们对这个问题进行了研究。

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

如果你想确定你还有剩余的可用内存,你必须限制MaxPermGen、Xmx和服务器上允许的线程数


风险是,如果服务器上的负载增加,您可能会出现OutOfMemoryError…

是的,这是RHEL 4。我不知道。谢谢