有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Tomcat PermGen上的java Spring MVC空间不断增加

我有一个基于SpringMVC 3.2的web应用程序,运行在Tomcat上。我使用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

在此期间,我的应用程序非常稳定。然而,看起来加载的类的数量在不断增加。我想了解在这些堆转储中新加载了哪些类。运行“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

共 (1) 个答案

  1. # 1 楼答案

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

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

    ${JAVA_HOME}/bin/jvisualvm

    哪个工具可以帮助您,解决方案很长,链接提供图像帮助。。此工具可以帮助您找到导致泄漏的类加载器(类加载器适用于服务器下的每个应用程序,以便在同一服务器下同时运行多个应用程序)

    然后你就可以在课堂上找到问题了。。一旦你知道问题的起因,你就能够解决它

    这是一个可以解释为什么会发生这种情况以及如何应对的链接:

    克迪维利。wordpress。com/2012/04/23/permgen内存泄漏/

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

    希望对大家有帮助