gpt4 book ai didi

java - 用tomcat PermGen空间做什么

转载 作者:IT老高 更新时间:2023-10-28 21:17:35 25 4
gpt4 key购买 nike

背景:我有一个使用 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。 512m不是一个不合理的最大值。但是,它只会延迟热部署泄漏。 Permgen 每次 hotdeploy 会增长约 25mb,在 Eclipse 中,可能是每次保存 Java 文件时。如果你像我一样有Ctrl+S抽搐,512m消失得很快。

解决方案:允许 Java 将类定义踢出内存,即垃圾收集字节码。将这些与提升的 permgen 大小一起添加:

-XX:+CMSClassUnloadingEnabled -XX:+UseConcMarkSweepGC

关于java - 用tomcat PermGen空间做什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10085028/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com