我收到以下错误
"java.lang.OutOfMemoryError: PermGen space"
在我的catalina.bat
文件中,输入set JAVA_OPTS
参数的适当位置在哪里?文件的底部或任何其他地方?
答案 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脚本。