当前位置:  开发笔记 > 编程语言 > 正文

在Tomcat 6中重复出现"PermGen"

如何解决《在Tomcat6中重复出现"PermGen"》经验,为你挑选了2个好方法。

我的Tomcat 6服务器上出现"PermGen"错误.

我知道应用程序导致了什么问题,但我不确定它为什么会这样做.该应用程序使用MySQL 5并在JDK 6上运行.

是否有任何工具/建议可用于诊断或分析特定应用的基本问题?

谢谢



1> kdgregory..:

PermGen用于存储类定义和实习字符串池.您的代码可能正在填充它(如果它不必要地调用实习生),但更可能的是您的应用程序的默认值不足.

这是因为Tomcat将在每次部署WAR时加载新类 - 或者,如果您在开发环境中工作,则每次编辑JSP时都会加载.这些应该最终得到清理,但在活动的开发环境中,您可以拥有加载旧实例和新实例的时段.或者,如果您在生产环境中并拥有大型Web应用程序,则可能只需要更多空间.

要设置permgen大小,请使用 -XX:MaxPermSize=SIZE

以下链接可能会有所帮助:调整GC(这是1.5版),GC FAQ(1.4.2版),Hotspot VM选项(我相信这是1.6)



2> opyate..:

尝试以下JVM切换器:

-XX:+UseConcMarkSweepGC
-XX:+CMSPermGenSweepingEnabled
-XX:+CMSClassUnloadingEnabled

提升permgen空间-XX:MaxPermSize只会延误问题.

请参阅此评论: 如何处理"java.lang.OutOfMemoryError:PermGen space"错误

这间接指向了我这两个帖子:问题,解决方案


如果您维护意外的类加载器链接,它会延迟问题.并且,可以肯定的是,有很多情况会发生这种情况,除非你知道你的库里面和外面(例如,java.beans.Introspector,维护类的缓存),否则几乎不可能找到它们.数据).
但是,问题通常只是网络应用程序太大而无法使用默认值.特别是在开发环境中,您拥有64Mb permgen,并且可能会不断重新部署.所有现有引用都需要时间超出范围(例如,挂起到它运行的最后一个servlet的池化线程).
推荐阅读
php
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有