提高Tomcat内存设置

82

可能是重复问题:
处理“java.lang.OutOfMemoryError: PermGen space”错误

我在我的开发机器上有8GB的RAM,并尝试同时运行Apache Tomcat(7.0.29)来托管Artifactory(2.6.3)和Jenkins(1.479)。 我尝试查找Jenkins的内存需求,但看起来他们的wiki已经挂了。

${TOMCAT_HOME}/bin/catalina.sh中,我添加了以下命令:

CATALINA_OPTS="$CATALINA_OPTS -server -Xms1024m -Xmx3052m"

我希望通过这种方式,将Tomcat的JVM大小保持在1到3 GB之间,这将为其他任务留下足够的空间,同时为Artifactory/Jenkins甚至其他任务提供足够的内存。

(值得一提的是,我尝试过仅使用JAVA_OPTS,但结果完全相同)。我保存更改并运行startup.sh。Tomcat开始启动,然后由于OOME而停止,并抱怨Tomcat已经耗尽了PermGen空间:

Exception in thread "SocketListener(<hex-stuff>.local.)"
java.lang.OutOfMemoryError: PermGen space
java.lang.OutOfMemoryError: PermGen space
java.lang.OutOfMemoryError: PermGen space
Exception in thread "hudson initialization thread" java.lang.OutOfMemoryError: PermGen space
java.lang.OutOfMemoryError: PermGen space

我在哪里出错了?我已经阅读了多篇文章,(相信我!)我正在精确地按照它们来操作。您有什么想法或建议以便我进一步调试吗?先感谢您了!


你尝试过增加permgen空间吗?例如:-XX:MaxPermSize=128m - Augusto
嗨@Augusto - 请看一下我在sgpalit的回答下面的评论 - 我有同样的问题要问你!再次感谢! - IAmYourFaja
1个回答

145

尝试设置这个

CATALINA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8 
-server -Xms1536m -Xmx1536m
-XX:NewSize=256m -XX:MaxNewSize=256m -XX:PermSize=256m 
-XX:MaxPermSize=256m -XX:+DisableExplicitGC"

{$tomcat-folder}\bin\setenv.sh 中(如有需要,请创建它)。

更多详细信息,请参见http://www.mkyong.com/tomcat/tomcat-javalangoutofmemoryerror-permgen-space/


15
嗨,请不要提供仅链接的答案,并尽可能将所有内容放入主要答案中。 - epoch
2
在我的情况下,我没有修改sh文件。让我有点沮丧的是,在服务器上有yum仓库,而Tomcat是从那里安装的。我只修改了/usr/share/tomcat7/conf/tomcat7.conf并添加了上述选项。 - Vic
32
Tomcat附带的RUNNING.txt文件中指出:“注意:不要使用JAVA_OPTS来指定内存限制。对于用于停止Tomcat的小型进程,您并不需要太多的内存。这些设置应该属于CATALINA_OPTS。” 由于这似乎是一个广为人知的答案,因此您可以补充说明。 - bentrm
1
一个1.5G的堆栈太大了,-Xms1536m。一个更小的-Xms128m或-Xms256m应该足够了。这将允许堆大小-Xmx1536m可以增加到比如-Xmx2048m。 - Martin Spamer
2
@MartinSpamer - -Xms与堆栈大小无关。请查看java -X,以了解这些设置实际上是做什么的。使用-Xms1536m是完全合理的,如果您知道进程最终将使用其堆的全部或几乎全部,则将-Xms设置为与-Xmx相同会使进程更加高效。 - Jules
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接