7

我收到以下错误

"java.lang.OutOfMemoryError: PermGen space"

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

4

5 回答 5

31

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

要更改设置,请创建一个名为setenv.batwindows 或setenv.shLinux 的文件,其条目如下:

视窗:

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

这将照顾其余的。

于 2012-10-31T18:17:30.400 回答
5

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

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

catalina.bat/catalina.sh 负责运行 setenv.bat/setenv.sh(如果存在)。这在此处的第 3.4 节中有所说明

于 2012-10-31T18:12:54.680 回答
5

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

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

-XX:+CMSClassUnloadingEnabled -XX:+UseConcMarkSweepGC

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

这里更多细节,尤其是评论。

于 2012-10-31T18:39:07.463 回答
1

发生这种情况是因为您多次重新部署。你可以增加你的烫发空间,但这只会延迟不可避免的错误。

您只需要重新启动服务器。我不知道解决方法。

于 2012-10-31T18:11:07.550 回答
1

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

于 2012-10-31T18:11:29.890 回答