增加Tomcat内存设置

IAm*_*aja 73 memory tomcat

可能重复:
处理"java.lang.OutOfMemoryError:PermGen space"错误

我的开发机器中有8GB内存,我正在尝试运行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"
Run Code Online (Sandbox Code Playgroud)

这应该将Tomcat的JVM保持在(基本上)1到3 GB之间,为我留下足够的空间用于其他东西,给予Tomcat足够的内存用于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
Run Code Online (Sandbox Code Playgroud)

我在这里哪里出错?我已经阅读了多篇关于如何做到这一点的文章(相信!)我正在严格遵循它们.有关如何进一步调试的任何想法或想法?提前致谢!

小智 128

尝试设置此

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

in {$tomcat-folder}\bin\setenv.sh(必要时创建).

有关详细信息,请参阅 http://www.mkyong.com/tomcat/tomcat-javalangoutofmemoryerror-permgen-space/.

  • Tomcat附带的RUNNING.txt声明:"注意:不要使用JAVA_OPTS来指定内存限制.对于用于停止Tomcat的小进程,您不需要太多内存.这些设置属于CATALINA_OPTS." 由于这似乎是一个很好的解读,你可以补充一点. (31认同)
  • 嗨,请不要使用仅限链接的答案,并尝试尽可能多地进入主要答案 (13认同)
  • 在我的情况下,我没有修改sh文件.我对服务器上有yum repo并从那里安装Tomcat这一事实感到有些气馁.我刚刚修改了`/ usr/share/tomcat7/conf/tomcat7.conf`并添加了上述选项. (2认同)
  • @MartinSpamer - `-Xms`与堆栈大小无关.有关这些设置*实际*的描述,请参阅`java -X`.使用`-Xms1536m`是完全合理的,并且将`-Xms`设置为与`-Xmx`相同会使进程更有效,如果你知道它最终将使用其全部或几乎所有的堆. (2认同)