我收到以下错误
"java.lang.OutOfMemoryError: PermGen space"
在我的catalina.bat
文件中,输入set JAVA_OPTS
参数的合适位置在哪里?文件底部还是其他地方?
请阅读:OutOfMemory 错误并确保您的应用程序没有内存泄漏和过多的内存使用。
要更改设置,请创建一个名为setenv.bat
windows 或setenv.sh
Linux 的文件,其条目如下:
视窗:
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
这将照顾其余的。
正确的位置是在 catalina.bat 旁边的 Tomcat /bin 目录中创建一个新文件,命名setenv.bat
并在set JAVA_OPTS=...
那里放置一个。
在 *nix 系统上它会是setenv.sh
catalina.bat/catalina.sh 负责运行 setenv.bat/setenv.sh(如果存在)。这在此处的第 3.4 节中有所说明
就像其他人已经建议您需要使用JAVA_OPTS
set 一样:
JAVA_OPTS="-XX:MaxPermSize=98m"
. 仅此一项,可能会解决问题,但是如果您要重新部署很多次并且您的 war/jar 很大,您也会达到此内存限制。
对于最后一种情况,在测试/开发机器上是正常的,我建议使用:
-XX:+CMSClassUnloadingEnabled -XX:+UseConcMarkSweepGC
此选项将启用卸载未使用的类。
看这里更多细节,尤其是评论。
发生这种情况是因为您多次重新部署。你可以增加你的烫发空间,但这只会延迟不可避免的错误。
您只需要重新启动服务器。我不知道解决方法。
在你的环境中。我们可以创建一个设置 JAVA_OPTS 的包装脚本,然后调用 catalina 脚本。