【发布时间】:2012-05-28 21:34:14
【问题描述】:
我们的 Java EE Web 应用程序中出现 PermGen Out of memory 异常:
java.lang.OutOfMemoryError: PermGen 空间
我们已经阅读了很多关于如何解决它的帖子,几乎所有帖子都说我们必须增加 PermSize(默认值和最大值)。但我们无法改变它们。 我们尝试修改 setenv.sh、catalina.sh 和 startup.sh 添加以下代码:
导出 JAVA_OPTS="-XX:PermSize=M -XX:MaxPermSize=1024m -XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled"
我们也尝试使用终端来做:
导出 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。
【问题讨论】:
-
您可能想要使用 CATALINA_OPTS 而不是 JAVA_OPTS:CATALINA_OPTS 将用于启动和关闭(您可能不需要一个巨大的堆和额外的永久空间来发送“SHUTDOWN”到关闭端口)。此外,JVM_ARGS 不会影响任何东西。
-
您如何实际启动 Tomcat?使用 CentOS 脚本,还是使用 bin/startup.sh?
-
感谢克里斯托弗!实际上,我们的服务器通过 WHM 和 cPanel 运行 Tomcat。我们使用帐户功能来安装 servlet,当我们更改 web 应用程序中的某些内容时,我们使用 WHM 中的“重新启动 Tomcat”选项(这是一个 webhost 管理器,一个 cPanel 层)。我们找不到 Tomcat 的启动脚本!!
-
您必须了解 cPanel 和 webhost 管理器是如何工作的……否则,您可以设置所需的所有环境变量,并且它可能不会影响 JVM。跨度>
标签: java tomcat memory permgen