非常感谢您的回答!
我发现Old JaxB 和 JDK8 Metaspace OutOfMemory Issue描述了与我相同的问题。
使用“ -Dcom.sun.xml.bind.v2.bytecode.ClassTailor.noOptimize=true
”,我能够使元空间使用稳定。
使用此选项,如果我的应用程序处于空闲状态(只是定期访问 web 服务,读取 xml 并将 xml 中的详细信息显示到我的视图层),它不再增加内存使用量,无论是 top 命令输出还是元空间(在控制台)。
但是,如果我执行任何操作(即访问网页并执行数据库操作/文件 IO 等),内存使用量就会上升。Java 1.6 也是这种情况,但在 Java 1.6 中,内存用于在 5-6 分钟内达到其正常水平。但是使用 java 1.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.jar