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

Pri*_*log 7 java tomcat

我得到了以下错误

"java.lang.OutOfMemoryError: PermGen space"
Run Code Online (Sandbox Code Playgroud)

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

Yog*_*ngh 30

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

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

视窗:

set JAVA_OPTS="-Xms256m -Xmx512m"
Run Code Online (Sandbox Code Playgroud)

Linux的:

export JAVA_OPTS="-Xms256m -Xmx512m"
Run Code Online (Sandbox Code Playgroud)

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

视窗:

  if exist "%CATALINA_HOME%\bin\setenv.bat" call "%CATALINA_HOME%\bin\setenv.bat"
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

这将照顾其余部分.


nos*_*nos 5

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

在*nix系统上它是 setenv.sh

catalina.bat/catalina.sh负责运行setenv.bat/setenv.sh(如果存在).这是在第3.4节提到这里


dan*_*dan 5

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

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

-XX:+CMSClassUnloadingEnabled -XX:+UseConcMarkSweepGC

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

看看这里更多的细节,特别是评论.