内存不足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) 个答案