我想获得PermGen的转储,看看为什么它正在填充.有没有办法分析这个?我已经知道像log4j,tomcat webapp重新加载等常见的嫌疑人,但我的应用程序中也有一些自定义代理生成代码,只是想深入了解.
这有可能吗?
我们有一个Web应用程序,它使用Spring-Hibernate将注册用户数据保存在Oracle数据库中.该应用程序在开发环境中运行良好,但是当我们在具有更多数据的实时环境中复制它时,它失败了.最初应用程序正常启动,但在几次操作之后发生'PermGen out of space'异常.
我已经开始在Google,Spring和Hibernate论坛上搜索,但它没有帮助.关于这个错误有很多讨论,但是对于每个解决方案,都有人说:"它有效"而其他人说'它没有'.
例如,许多人提出增加-XX:MaxPermSizeJVM参数,其他人说它不起作用.有帖子说需要使用javassist库和其他库以及cglib库的问题.其他人说问题出在cglib上.
我们使用Java1.5_0_09,Spring 2.5和javaassist3.4.GA,Tomcat 5.5作为web容器,Oracle 10g作为数据库.
任何人都能解释一下导致这个问题的原因以及如何解决这个问题?
我想把应用服务器的Permgen转储.
我不想使用,-XX:+TraceClassLoading -XX:+TraceClassUnloading因为我不想重新启动服务器,我也不想使用jconsole.
我有任何工具jmap(用于堆转储没有找到permgen的任何选项)来获得permgen,以便我只能提供pid.
我收到以下错误"http-9000-5"java.lang.OutOfMemoryError:PermGen space
org.apache.catalina.core.ApplicationDispatcher为servlet jsp调用SEVERE:Servlet.service()抛出异常java.lang.OutOfMemoryError:PermGen空间.
我的应用程序使用axis2.I增加了堆大小1024mb.But它不工作.这将是什么问题.解决方案请
我正在Glassfish 3.1上运行GWT + Hibernate应用程序.几个小时后,我跑出了Permgen空间.这没有任何webapp重新加载.我正在跑步–XX:MaxPermSize=256m –XmX1024m.
我接受了这个页面的建议,发现我泄漏了很多类 - 我所有的Hibernate模型和所有的GWT RequestFactory代理.
上面引用的指南说"检查链条,找到意外参考,并修复代码".说起来容易做起来难.
类加载器总是指向一个实例org.glassfish.web.loader.WebappClassLoader.进一步挖掘,我发现了许多来自$Proxy135和类似命名对象的引用.但我不知道还有什么可以贯彻的.
permgen ×5
java ×4
classloader ×1
glassfish-3 ×1
hibernate ×1
jvm ×1
memory-leaks ×1
profiling ×1
spring ×1
tomcat5.5 ×1
tomcat6 ×1