gpt4 book ai didi

java - Spring MVC on Tomcat PermGen Space 不断增加

转载 作者:行者123 更新时间:2023-11-30 07:08:29 25 4
gpt4 key购买 nike

我有一个基于 SpringMVC 3.2 构建并在 Tomcat 上运行的 Web 应用程序。我使用 VisualVM 监控 permgen 空间,发现它不断增加: enter image description here

我进行了三个堆转储并运行“ClassLoader Loaded Classes Histo”分析并发现了这些结果:

晚上 9:44 转储:

loader:org.springframework.instrument.classloading.tomcat.TomcatInstrumentableClassLoader#1,
count:3285

晚上 9:55 转储:

loader:org.springframework.instrument.classloading.tomcat.TomcatInstrumentableClassLoader#1,
count:3286

早上 7:40 的转储:

loader:org.springframework.instrument.classloading.tomcat.TomcatInstrumentableClassLoader#1,
count:3855

期间我的app非常安静。然而,看起来加载的类的数量在不断增加。我想了解在这些堆转储中新加载了哪些类。运行“ClassLoader Loaded Classes”并没有给我太多信息,因为我沉浸在这些信息中: enter image description here

谁有分析过这类问题的经验?

更新 JVM 信息

JVM: Java HotSpot(TM) 64-Bit Server VM (20.45-b01, mixed mode)
Java: version 1.6.0_45, vendor Sun Microsystems Inc.

JVM 参数:

-Dvisualvm.id=4226015013703
-Xdebug
-Xrunjdwp:transport=dt_shmem,address=javadebug,suspend=y,server=n
-Dvisualvm.id=4214057282541
-Denv=dev-no-mas
-Dorg.slf4j.simpleLogger.defaultLogLevel=debug
-Dssgateway.disabled=true
-Dcom.sun.management.jmxremote=
-Dcom.sun.management.jmxremote.port=1299
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
-Djava.rmi.server.hostname=127.0.0.1
-Djava.util.logging.config.file=C:\Users\luog.IKARI\.IntelliJIdea13\system\tomcat\Unnamed_rythm_2\conf\logging.properties
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
-Djava.endorsed.dirs=C:\l\j\apache-tomcat-6.0.29\endorsed
-Dcatalina.base=C:\Users\luog.IKARI\.IntelliJIdea13\system\tomcat\Unnamed_rythm_2
-Dcatalina.home=C:\l\j\apache-tomcat-6.0.29
-Djava.io.tmpdir=C:\l\j\apache-tomcat-6.0.29\temp

最佳答案

  • PermGen 基本上是应该保存系统对象的堆,应用程序对象的堆是常规堆空间..

一般的问题是每个类都持有对类定义和创建他的每个类加载器的引用,并且每个类加载器都持有对他创建的所有类的引用。因此,当垃圾收集器移动所有对象时,因为它们总是引用它们,所以它们不断增长……而 GC 不会释放它们。在他们使用的示例中:

${JAVA_HOME}/bin/jvisualvm

哪个工具可以帮助你,解决方案很长,链接提供图像帮助..这个工具可以帮助你找到导致泄漏的类加载器(类加载器是针对服务器下的每个应用程序,以便莱多个应用程序在同一台服务器下一起运行)

然后你会去寻找问题类..一旦你知道是什么导致了问题,你就能够解决它..

这个链接将解释为什么会发生这种情况以及如何处理:

cdivilly.wordpress.com/2012/04/23/permgen-memory-leak/

您可以阅读这篇精彩的演示文稿。从第 11 页开始,您可以了解如何识别泄漏和解决方案。非常非常有用 http://people.apache.org/~markt/presentations/2010-11-04-Memory-Leaks-60mins.pdf

希望对你有帮助

关于java - Spring MVC on Tomcat PermGen Space 不断增加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23943990/

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