有 Java 编程相关的问题?

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

内存不足Java 8虚拟机。本机内存

我在Java8元空间内存管理方面遇到了困难。我目前正在RHEL上使用JDK1.8_60

这是我的tomcat类路径:

/opt/java/jdk1.8.0_60/bin/java
-Djava.util.logging.config.file=/opt/apache/tomcat/apache-tomcat/conf/logging.properties
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
-Xms1g
-Xmx16g
-XX:MetaspaceSize=128m
-XX:MaxMetaspaceSize=256m
-XX:+UnlockDiagnosticVMOptions
-XX:NativeMemoryTracking=summary
-Dorg.apache.cxf.stax.allowInsecureParser=1
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/opt/apache/tomcat/apache-tomcat/temp/heap.dump
-Xloggc:/opt/apache/tomcat/apache-tomcat/logs/gc.log
-XX:+PrintGC
-XX:+PrintGCDateStamps
-XX:+PrintGCDetails
-XX:+UseGCLogFileRotation
-XX:GCLogFileSize=5m
-XX:NumberOfGCLogFiles=20
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=9999
-Dcom.sun.management.jmxremote.rmi.port=9998
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.local.only=false
-Djava.rmi.server.hostname=localhost
-Djava.endorsed.dirs=/opt/apache/tomcat/apache-tomcat/endorsed
-classpath /opt/apache/tomcat/apache-tomcat/bin/bootstrap.jar:/opt/apache/tomcat/apache-tomcat/bin/tomcat-juli.jar
-Dcatalina.base=/opt/apache/tomcat/apache-tomcat
-Dcatalina.home=/opt/apache/tomcat/apache-tomcat
-Djava.io.tmpdir=/opt/apache/tomcat/apache-tomcat/temp
org.apache.catalina.startup.Bootstrap start

当我执行jcmd <PID> VM.native_memory summary.diff时,它显示类的保留内存(我认为是元空间大小)超过了256m(看起来像默认的1g)

-                 Java Heap (reserved=16777216KB, committed=5485568KB)
                            (mmap: reserved=16777216KB, committed=5485568KB)

-                     Class (reserved=1149430KB, committed=112886KB)
                            (classes #16384 +1)
                            (malloc=6646KB #23800)
                            (mmap: reserved=1142784KB, committed=106240KB)

-                    Thread (reserved=32005KB -2065KB, committed=32005KB -2065KB)
                            (thread #32 -2)
                            (stack: reserved=31868KB -2056KB, committed=31868KB -2056KB)
                            (malloc=101KB -7KB #161 -10)
                            (arena=36KB -2 #62 -4)

我使用cxfdynamic client进行动态WS调用,因此每个调用都会生成大量的类,但看起来这些类永远不会从元空间中删除(即使我在jvisualvm中单击按钮performgc)。最后,元空间已满,应用程序以OutOfMemoryException:metaspace

我也将GC1用于这个配置-XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:+ParallelRefProcEnabled -XX:+AggressiveOpts,但这对我没有帮助

那么,jvm中是否可能存在显示元空间内存分配错误的bug(或者更糟的是,它使用此值来管理元空间)?有人能告诉我一些如何解决元空间清理问题的方向吗

非常感谢


共 (0) 个答案