最近我在我的 Web 应用程序中遇到了这个错误:
java.lang.OutOfMemoryError: PermGen 空间
它是运行在 Tomcat 6 和 JDK 1.6 上的典型 Hibernate/JPA + IceFaces/JSF 应用程序。显然,这可能会在重新部署应用程序几次后发生。
是什么原因造成的,可以做些什么来避免它?我该如何解决这个问题?
解决方案是在启动 Tomcat 时将这些标志添加到 JVM 命令行:
-XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled
您可以通过关闭 tomcat 服务,然后进入 Tomcat/bin 目录并运行 tomcat6w.exe 来做到这一点。在“Java”选项卡下,将参数添加到“Java 选项”框。单击“确定”,然后重新启动服务。
如果您收到错误 ,则指定的服务不作为已安装的服务存在, 您应该运行:
tomcat6w //ES//servicename
其中 _ servicename_ 是在 services.msc 中查看的服务器名称
资料来源:orx 对Eric 的敏捷答案的评论。