我们的Java EE Web应用程序中存在PermGen Out of memory异常:
java.lang.OutOfMemoryError:PermGen space
我们已经阅读了很多关于如何解决它的帖子,几乎所有人都说我们必须增加PermSize(默认值和最大值)。但我们无法改变它们。 我们尝试修改 setenv.sh,catalina.sh和startup.sh 添加此代码:
export JAVA_OPTS =“ - XX:PermSize = M -XX:MaxPermSize = 1024m -XX:+ CMSClassUnloadingEnabled -XX:+ CMSPermGenSweepingEnabled“
我们也尝试使用终端:
export JVM_ARGS =“ - XX:PermSize = 256m-XX:MaxPermSize = 1024m -XX:+ CMSClassUnloadingEnabled -XX:+ CMSPermGenSweepingEnabled“
但是当我们使用“jstat -gcpermcapacity”检查它时没有任何变化;记忆总是一样的。 我们的环境是Centos 6,Apache 2.2,Tomcat 5.5,Java 6,我们已完成应用程序部署 在我们的帐户中通过WHM安装servlet。
答案 0 :(得分:2)
尝试在tomcat.conf中更改它。 实际上,请检查ps ax | grep java,看看已经运行了什么命令行来生成你的参数。我的产品:
26552 pts / 1 Sl 0:36 / usr / lib / jvm / jre / bin / java -Xdebug -Xrunjdwp:transport = dt_socket,address = 8000,server = y,suspend = n -Xmx1024m -XX:MaxPermSize = 128m -classpath:/usr/share/tomcat6/bin/bootstrap.jar:/usr/share/tomcat6/bin/tomcat-juli.jar:/usr/share/java/commons-daemon.jar -Dcatalina.base = / usr / share / tomcat6 -Dcatalina.home = / usr / share / tomcat6 -Djava.endorsed.dirs = -Djava.io.tmpdir = / var / tmp / tomcat6 -Djava.util.logging.config.file = / usr / share / tomcat6 / conf / logging.properties -Djava.util.logging.manager = org.apache.juli.ClassLoaderLogManager org.apache.catalina.startup.Bootstrap start
这是关于tomcat6,java6,centos 5.5
答案 1 :(得分:0)
我们已经解决了这个问题! 我们的应用程序在 WHM 上运行,执行Tomcat重启的脚本不使用 startup.sh 文件。在我们的例子中,重置是由“starttomcat”执行的,这是一个在 / usr / bin中找到的文件。我们修改了文件,保留了变量 my @ cmd 如下:
my @cmd = (
"./jsvc",
"-user",
"$user",
"-XX:PermSize=64M",
"-XX:MaxPermSize=512m",
"-cp",
"$jars",
"-Djava.endorsed.dirs=../common/endorsed",
"-outfile",
"${logdir}/catalina.out",
"-errfile",
"${logdir}/catalina.err",
"-verbose",
@options,
"org.apache.catalina.startup.Bootstrap",
#"-security",
"start",
);
它运行!