我最近将java版本从1.6升级到1.8。迁移到java1.8之后,元内存消耗随着时间的推移而增加(通过JConsole观察到)。此外,每次访问网页时,元空间的大小都会增加。所以,
,我有什么办法可以强行清理Metaspace吗?
,我有没有办法检查一下Metaspace的所有功能,并增加metaspace的大小?
哪个GC (SerialGC,G1,ConcMarkSweep)有效地清除了Metaspace &我应该为GC?使用哪些JVM配置
正确的metaspace操作所需的最低RAM java 1.8是多少?在我的例子中,它的内存限制为256百万内存,在一个微型linux盒上具有相同的交换大小。
如果我们使用XX:MaxMetaSpaceSize限制metaspace大小,JVM将引发外部内存:metaspace条件。
发布于 2016-09-09 10:20:04
谢谢你的回答!
我找到了Old JaxB and JDK8 Metaspace OutOfMemory Issue,来描述和我的问题一样的问题。
有了"-Dcom.sun.xml.bind.v2.bytecode.ClassTailor.noOptimize=true",我就能够稳定地使用metaspace。
有了这个选项之后,如果我的应用程序处于空闲状态(只是定期访问一个webservice,读取xml,并将xml中的细节显示到我的视图层),那么它将不再增加顶部命令输出中的内存使用量,而不是metaspace (在J控制台中)。
但是,如果我做任何手术。访问网页和执行数据库操作/文件IO等)内存使用量增加了。Java1.6的情况也是如此,但对于java1.6,用于在5-6分钟内达到正常水平的内存也是如此。但是使用java1.8,它需要10-12个小时才能达到正常水平。
以下是我的jvm配置:
java -Dsun.rmi.dgc.client.gcInterval=60000 -XX:NewRatio=3 -
XX:MinHeapFreeRatio=60 -XX:MaxHeapFreeRatio=70 -Xmx64M -Xms32M -
XX:MetaspaceSize=12M -XX:+UseLargePagesInMetaspace -
XX:CompressedClassSpaceSize=10M -XX:+UseLargePages -
XX:+CMSClassUnloadingEnabled -
Dcom.sun.xml.bind.v2.bytecode.ClassTailor.noOptimize=true -
Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.ssl=false -
Dcom.sun.management.jmxremote.authenticate=false -
Dcom.sun.management.jmxremote.port=1099 -Dfile.encoding=UTF8 -
Dorg.apache.jasper.compiler.disablejsr199=true -Duser.timezone=$timezone -jar start.jarhttps://stackoverflow.com/questions/39314727
复制相似问题