6

我刚刚从 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 秒。

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

4

1 回答 1

1

你有没有分析过你的应用程序?

我会说这里涉及元空间垃圾收集。它收集死类和类加载器,并在类元数据使用量达到 MaxMetaspaceSize(由 缩小-XX:MaxMetaspaceSize)时触发。

于 2018-10-24T17:41:15.957 回答