2010-06-07 63 views
0

我负责维护一台运行Java EE Web应用程序的服务器。 Jboss 4.0被用作servlet容器,并且JVM启动的内存足以运行应用程序(我认为):Java EE项目,内存太多?

if [“x $ JAVA_OPTS”=“x”];然后 JAVA_OPTS = “ - 服务器-Xms1500m -Xmx1500m -Dsun.rmi.dgc.client.gcInterval = 3600000 -Dsun.rmi.dgc.server.gcInterval = 3600000” 网络

我必须重新启动JBoss的日常生活,因为java进程开始使用大量内存,所以应用程序运行速度很慢。

我只想知道它是否可能是设计问题或jboss配置问题。

PD:我知道我只写了一些细节,但这就是我所拥有的。

谢谢。

回答

1

使用大量内存没有根本问题。如果VM大小过大,并且您创建了大量需要垃圾回收的对象,则需要更频繁地执行GC,这意味着更频繁地进行全GC。真正大型虚拟机上的完整GC可能会导致“冻结”长达数秒。对于某些应用,这可能是一个真正的问题。在其他人可能不是。

您希望随时跟踪虚拟机大小,任何分析器都会这样做。 VisualVM附带Java 6u14(iirc)或更高版本,它将执行此操作。如果随着时间的推移观看应用程序,您会看到内存量增加,然后突然下降,因为临时对象被垃圾收集形成“锯”模式。

现在随着时间的推移可能会增加(即整体斜率上升)。这可能会或可能不会表明问题。它可能表明你正在泄漏记忆。这可能意味着你将引用保存在你根本不需要的对象上,因此它们不会被GCed。或者根本没有问题。这取决于你的应用程序在做什么。例如,如果您随着时间的推移在内存中缓存越来越多的数据量,那么这可能不是泄漏,但它可能表明一个架构问题,因为您并未刷新缓存。

但是1.5GB的内存不是很多,所以只要让你的虚拟机的大小和它本身没有理由让你每天都必须重新启动它。这听起来像你有另一个问题,粘性参考是最有可能的罪魁祸首。