随着元空间的增长,应用程序正在放缓
Posted
技术标签:
【中文标题】随着元空间的增长,应用程序正在放缓【英文标题】:Applications is slowing with metaspace growth 【发布时间】:2019-03-28 19:03:20 【问题描述】:我刚刚从 grails 2.4.3 迁移到 grails 2.5.6,从 Java 7 迁移到 Java 8。 我正在尝试在我的应用程序中设置最佳元空间大小。
实际元空间大小对应用程序性能有很大影响:
使用的元空间和响应平均时间:
200 MB - 339 毫秒 300 MB - 380 毫秒 400 MB - 430 毫秒 500 MB - 460 毫秒 600 MB - 530 毫秒元空间在 90 分钟内从应用程序开始增长到 620MB。
这是我的实际 gc 设置:
-Xms14G -Xmx14G\
-XX:+UseG1GC\
-XX:ParallelGCThreads=8\
-XX:ConcGCThreads=4\
-XX:MaxGCPauseMillis=200\
-XX:+UseLargePages\
-XX:+UseLargePagesInMetaspace\
-XX:+AlwaysPreTouch\
-XX:InitialBootClassLoaderMetaspaceSize=512M\
-XX:MetaspaceSize=512M\
-XX:MinMetaspaceExpansion=8M\
-XX:MaxMetaspaceExpansion=32M\
-XX:+UseStringDeduplication\
-XX:+ParallelRefProcEnabled\
-XX:-TieredCompilation\
当 MaxMetaspaceSize 设置为 512M 时,运行几个小时后,我的应用程序会在一小时内减慢 1 或 2 倍。响应时间大约是 10 秒。
有人遇到过这样的问题吗?在您的应用程序中,元空间对性能有这样的影响吗?
【问题讨论】:
我投票决定将此问题作为离题结束,因为诸如“有人遇到过这样的问题吗?在您的应用程序中,元空间对性能有如此影响?”之类的问题。在 *** 上没有用。 【参考方案1】:您是否对您的应用进行了概要分析?
我想说Metaspace garbage collection 参与其中。它收集死类和类加载器,并在类元数据使用量达到 MaxMetaspaceSize(被-XX:MaxMetaspaceSize
缩小)时触发。
【讨论】:
当元空间达到最大值并且gc正在清除元空间时,平均时间会跳到1-10s。它每小时发生 1-2 次。 第一个图表上的 imgur.com/a/b7UAmOR 是平均时间和第二个元空间大小。正如你所看到的,没有工作 gc 平均时间正在增长。以上是关于随着元空间的增长,应用程序正在放缓的主要内容,如果未能解决你的问题,请参考以下文章