use*_*421 7 java memory garbage-collection jar
我正在检查 Tomcat 应用程序的堆转储,该应用程序在启动后负载增加时往往会崩溃。在崩溃期间,我观察到执行失败的尝试次数不断增加full GC(6GB 最大堆大小,使用CMS)和increased thread count(范围从 600 到 2000)。垫报告:
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
Run Code Online (Sandbox Code Playgroud)
引用的对象的类和数量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
Run Code Online (Sandbox Code Playgroud)
文件引用者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
Run Code Online (Sandbox Code Playgroud)
jar对我来说,文件被多次加载似乎很奇怪。我怀疑内存泄漏,但因为即使jdk1.8.0_112/jre/lib/rt.jar加载了 1000 多次,我也不知道该怎么想。所以我正在寻找解释为什么 Java 多次加载相同的 jar 文件。也许有一个标志来控制这个过程,我可以通过这种方式提高 Tomcat 的性能。
小智 -2
https://bugs.openjdk.java.net/browse/JDK-8212621
jdk9 中将删除 Finalize 方法;、、 和finalize中的方法已在 JDK 9 中被弃用并删除,并且其实现已更新为无操作。java.util.ZipFilejava.util.Inflatorjava.util.Deflator
所以如果你升级使用jdk 9或以上版本,jdk 9就不会出现这个问题。
对于如何在 jdk 8 中修复,仍然不知道。
布尔斯