【问题标题】: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 秒。

有人遇到过这样的问题吗?在您的应用程序中,元空间对性能有这样的影响吗?

【问题讨论】:

  • 我投票决定将此问题作为离题结束,因为诸如“有人遇到过这样的问题吗?在您的应用程序中,元空间对性能有如此影响?”之类的问题。在 StackOverflow 上没有用。

标签: performance grails groovy java-8 metaspace


【解决方案1】:

您是否对您的应用进行了概要分析?

我想说Metaspace garbage collection 参与其中。它收集死类和类加载器,并在类元数据使用量达到 MaxMetaspaceSize(被-XX:MaxMetaspaceSize 缩小)时触发。

【讨论】:

  • 当元空间达到最大值并且gc正在清除元空间时,平均时间会跳到1-10s。它每小时发生 1-2 次。
  • 第一个图表上的 imgur.com/a/b7UAmOR 是平均时间和第二个元空间大小。正如你所看到的,没有工作 gc 平均时间正在增长。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-24
  • 2012-07-31
  • 2016-04-27
  • 2014-07-07
  • 2013-07-20
  • 1970-01-01
相关资源
最近更新 更多