《雄猫6》中反复出现的“彼尔姆根”

2022-09-02 11:47:56

我一直在我的Tomcat 6服务器上收到“PermGen”错误。

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

是否有任何工具/建议来诊断或分析特定应用程序的潜在问题?

谢谢


答案 1

PermGen 用于存储类定义和暂存字符串池。您的代码可能正在填充它(如果它不必要地调用 intern),但更有可能的是,应用程序的默认值过小。

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

要设置烫发量大小,请使用-XX:MaxPermSize=SIZE

以下链接可能会有所帮助:调整GC(这是1.5版本),GC常见问题解答(1.4.2版本),热点VM选项(我相信这是1.6)


答案 2

请尝试以下 JVM 交换机:

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

增加permgen空间只会延迟问题。-XX:MaxPermSize

请参阅此评论:如何处理“java.lang.OutOfMemoryError:PermGen空间”错误

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