在catalina.bat中适当的位置设置JAVA_OPTS

时间:2012-10-31 18:08:10

标签: java tomcat

我收到以下错误

"java.lang.OutOfMemoryError: PermGen space"

在我的catalina.bat文件中,输入set JAVA_OPTS参数的适当位置在哪里?文件的底部或任何其他地方?

5 个答案:

答案 0 :(得分:30)

请阅读:OutOfMemory Error并确保您的应用程序没有内存泄漏和过多的内存使用情况。

要更改设置,请为Windows创建名为setenv.bat的文件,为Linux创建setenv.sh文件,条目如下:

视窗:

set JAVA_OPTS="-Xms256m -Xmx512m"

Linux的:

export JAVA_OPTS="-Xms256m -Xmx512m"

只需将此(setenv.bat / setenv.sh)文件放在%CATALINA_HOME%\bin\文件夹中即可。您的命令文件(catalina.bat/catalina.sh)已经有如下声明:

视窗:

  if exist "%CATALINA_HOME%\bin\setenv.bat" call "%CATALINA_HOME%\bin\setenv.bat"

Linux:

  if [ -r "$CATALINA_BASE/bin/setenv.sh" ]; then
     . "$CATALINA_BASE/bin/setenv.sh"
  elif [ -r "$CATALINA_HOME/bin/setenv.sh" ]; then
     . "$CATALINA_HOME/bin/setenv.sh"
  fi

这将照顾其余部分。

答案 1 :(得分:5)

正确的位置是在catalina.bat旁边的Tomcat / bin目录中创建一个名为setenv.bat的新文件,并在其中放置一个set JAVA_OPTS=...

在* nix系统上,它是setenv.sh

catalina.bat / catalina.sh负责运行setenv.bat / setenv.sh(如果存在)。这在3.4 here

部分中有说明

答案 2 :(得分:5)

像其他人已经建议你需要使用JAVA_OPTS设置为: JAVA_OPTS="-XX:MaxPermSize=98m"。仅此一点,可能会解决问题,但是如果你重新部署很多次并且你的war / jar很大,你也会达到这个内存限制。

对于最后一个场景,在测试/开发机器上是正常的,我建议使用:

-XX:+CMSClassUnloadingEnabled -XX:+UseConcMarkSweepGC

此选项将启用卸载未使用的类。

查看here更多详细信息,尤其是评论。

答案 3 :(得分:1)

这是因为您重新部署了几次。你可以增加你的perm gen空间,但它只会延迟不可避免的错误。

您只需重新启动服务器即可。我不知道有一种解决方法。

答案 4 :(得分:1)

在您的环境中。我们可以创建一个包装器脚本来设置JAVA_OPTS然后调用catalina脚本。