2011-05-13 111 views
0

我在通过jboss运行Web服务应用程序时面临“内存不足错误异常”4.2 如何增加jboss的内存?这会解决问题吗?Jboss内存问题

回答

0

您可以增加JBoss的内存,但一定要找出为什么它使用比预期更多的内存来确保问题不会回来咬你。

设置此发动的JBoss之前,你的外壳,同时进行实验:

JAVA_OPTS="-Xms512m -Xmx1024m" 
+1

我完全同意这个答案,但只是一个警告:大多数JBoss启动脚本重置JAVA_OPTS,因此设置环境变量像这样在大多数情况下不起作用。 – 2011-05-13 07:12:36

+0

啊,很好。自从使用JBoss以来,一段时间了。 – 2011-05-13 07:15:22

+0

我目前的记忆是“-Xms128m -Xmx512m”,所以你推荐将它改为“Xms512m -Xmx1024m”吧?这是否会影响其他系统资源(请注意,jboss当前是在Linux服务器上运行的)? – roy 2011-05-13 07:45:48

3

你应该首先确认是否内存使用未发现异常。如果不是,增加内存分配可能是一个好主意。在默认设置下,JBoss的默认内存分配很小。

你想确认内存不足是堆不足(它可能是permgen等,如果它是permgen,请参考一般的OOME(OutOfMemoryError)问题)。如果你使用的是Java 1.6,你只需要读取异常消息来确定。

一旦您确认这是一个堆不足的情况,建议您确认在更大的堆大小之前没有发生内存泄漏。要做到这一点,你可以附加一个像VisualVM一样的堆监视器,并在压力下监视堆的使用情况(有关更多信息,请参阅:http://olex.openlogic.com/wazi/2009/how-to-fix-memory-leaks-in-java/)。

完成此操作后,您确定自己的合法堆不足,可以编辑run.conf(Linux)或run.bat(Windows)以分配更多堆。您可以搜索JAVA_OPTS并将其更改为-Xmx1024m

+0

我目前的记忆是“-Xms128m -Xmx512m”,所以你建议将它改为“Xms512m -Xmx1024m”吧?这是否会影响其他系统资源(请注意,jboss当前是在Linux服务器上运行的)? – roy 2011-05-13 08:47:58

+2

@roy:如果您将Xmx设置为例如1024m,这意味着java进程不会使用超过1GB的内存(加上一点点堆栈/ permgen等)。所以问题是,你可以节省多少,例如512MB的额外内存(因为你以前使用512MB的堆,现在1GB)?要确定这一点,你可以使用命令'vmstat'并监视服务器是否有足够的RAM。具体而言,您可以使用新配置将系统置于压力之下,并监视服务器的内存使用情况。如果没有交换发生,你可能有足够的内存来备用。 – 2011-05-13 16:46:44