【问题标题】:A lot of java.util.zip.ZipFile$ZipFileInputStream objects/ Same jars loaded multiple times很多 java.util.zip.ZipFile$ZipFileInputStream 对象/多次加载相同的罐子
【发布时间】:2018-03-06 15:13:37
【问题描述】:

我正在检查 Tomcat 应用程序的堆转储,当它在启动后立即增加负载时往往会崩溃。在崩溃期间,我观察到执行full GC(最大堆大小为6GB,使用CMS)和increased thread count(范围从600 到2000)的不成功尝试次数越来越多。 MAT 报告:

One instance of "java.lang.ref.Finalizer" loaded by "<system class loader>" occupies 
5 291 528 160 (94,59%) bytes. The instance is referenced
by org.python.core.ThreadState @ 0x679fba460 , loaded
by "org.apache.catalina.loader.ParallelWebappClassLoader @ 0x674d08e88".
The memory is accumulated in one instance of "java.lang.ref.Finalizer" loaded
by "<system class loader>".

Keywords
java.lang.ref.Finalizer
org.apache.catalina.loader.ParallelWebappClassLoader @ 0x674d08e88

java.lang.ref.Finalizer引用的对象的类和数量:

 ...
 302 org.geoserver.platform.resource.FileSystemResourceStore$FileSystemResource$1
 406 java.net.SocksSocketImpl
 1519 java.util.jar.JarFile
 2075 java.util.zip.Deflater
 2086 org.geotools.map.MapContent
 2094 java.util.Timer$1
 2138 org.geoserver.wms.WMSMapContent
 2328 org.geotools.jdbc.JDBCFeatureReader
 2767 sun.net.www.protocol.jar.URLJarFile
 4106 javax.media.jai.WritableRenderedImageAdapter
 4724 org.geotools.map.FeatureLayer
 5801 java.io.FileInputStream
 8045 java.util.zip.Inflater
24981 java.util.zip.ZipFile$ZipFileInflaterInputStream
26772 java.util.zip.ZipFile$ZipFileInputStream

java.util.zip.ZipFile$ZipFileInputStream引用的文件:

  ...
  339 /usr/local/tomcat8/webapps/my-server/WEB-INF/lib/gt-metadata-9.4.jar
  345 /usr/local/tomcat8/webapps/my-server/WEB-INF/lib/hsqldb-1.8.0.10.jar
  388 /usr/local/tomcat8/webapps/my-server/WEB-INF/lib/javassist.jar
  396 /usr/local/tomcat8/lib/orai18n-servlet.jar
  427 /usr/lib/jvm/jdk1.8.0_112/jre/lib/ext/sunjce_provider.jar
  448 /usr/local/tomcat8/webapps/my-server/WEB-INF/lib/xstream-1.4.2.jar
  449 /usr/local/tomcat8/webapps/my-server/WEB-INF/lib/jersey-core-1.17.jar
  474 /usr/local/tomcat8/lib/orai18n.jar
  538 /usr/local/tomcat8/webapps/my-server/WEB-INF/lib/jersey-server-1.17.jar
  553 /usr/local/tomcat8/webapps/my-server/WEB-INF/lib/gt-referencing-9.4.jar
  591 /usr/local/tomcat8/webapps/my-server/WEB-INF/lib/jts-1.13.jar
  614 /usr/local/tomcat8/webapps/my-server/WEB-INF/lib/jackson-databind-2.1.4.jar
  679 /usr/local/tomcat8/webapps/my-server/WEB-INF/lib/gt-opengis-9.4.jar
  688 /usr/local/tomcat8/webapps/geoserver/WEB-INF/lib/gt-xsd-gml3-15.2.jar
  908 /usr/local/tomcat8/webapps/my-server/WEB-INF/lib/jai-core-1.1.3.jar
 1023 /usr/local/tomcat8/webapps/my-server/WEB-INF/lib/gt-main-9.4.jar
 1161 /usr/local/tomcat8/webapps/my-server/WEB-INF/lib/ojdbc6.jar
 1194 /usr/local/tomcat8/lib/orai18n-translation.jar
 1688 /usr/lib/jvm/jdk1.8.0_112/jre/lib/rt.jar
 6631 /usr/local/tomcat8/lib/ojdbc6.jar

jar 文件被多次加载对我来说似乎很奇怪。我会怀疑内存泄漏,但因为即使jdk1.8.0_112/jre/lib/rt.jar 被加载了 1000 多次,我也不知道该怎么想。 所以我正在寻找解释为什么 Java 会多次加载相同的 jar 文件。也许有一个标志来控制这个过程,我可以通过这种方式提高 Tomcat 的性能。

【问题讨论】:

    标签: java memory jar garbage-collection


    【解决方案1】:

    https://bugs.openjdk.java.net/browse/JDK-8212621 finalize 方法将在 jdk9 中移除; java.util.ZipFilejava.util.Inflatorjava.util.Deflator 中的 finalize 方法已被弃用以在 JDK 9 中删除,并且其实现已更新为无操作。

    所以如果你升级到使用jdk 9或更高版本,jdk 9就不会出现这样的问题。

    关于如何在 jdk 8 中修复,仍然不知道。

    brs

    【讨论】:

    • 这和这个问题有什么关系?似乎无关。
    • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-30
    • 2016-05-24
    • 2012-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多