【发布时间】:2012-04-22 12:34:11
【问题描述】:
背景:我有一个使用 JSP 的 Web 项目。 IDE 是 Eclipse。 tomcat的配置是:资源变化时自动发布,发布间隔为“1秒”。
classes文件夹中的一个属性文件,用来保存一些设置。它也可以被servlet动态修改。修改操作由 JSP 中的保存按钮触发。
问题:经过多次保存操作,Tomcat 自带java.lang.OutOfMemoryError: PermGen space。
记录消息
java.lang.OutOfMemoryError: PermGen space
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632)
at java.lang.ClassLoader.defineClass(ClassLoader.java:616)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:1815)
at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:872)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1325)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1204)
at org.apache.catalina.startup.WebAnnotationSet.loadApplicationServletAnnotations(WebAnnotationSet.java:108)
at org.apache.catalina.startup.WebAnnotationSet.loadApplicationAnnotations(WebAnnotationSet.java:58)
at org.apache.catalina.startup.ContextConfig.applicationAnnotationsConfig(ContextConfig.java:297)
at org.apache.catalina.startup.ContextConfig.start(ContextConfig.java:1064)
at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:261)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:120)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4238)
at org.apache.catalina.core.StandardContext.reload(StandardContext.java:3083)
at org.apache.catalina.loader.WebappLoader.backgroundProcess(WebappLoader.java:404)
at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1279)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1571)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1580)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1580)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1560)
at java.lang.Thread.run(Thread.java:662)
【问题讨论】:
-
请仔细阅读下面的文章,它完全解释了配置tomcat以增加permGen Tomcat PermGen Space
-
每当人们在不重新启动 Tomcat 的情况下重复重新部署 Web 应用程序时,我都会在 Tomcat 中收到此错误。由于与类加载过程相关的泄漏,permgen 空间在每次重新部署时都会变得更满。增加 permgen 大小会延迟它耗尽内存的时间,但实际上,您需要确保 Tomcat 在重新部署 web 应用程序时被反弹。