随着元空间增长,应用程序正在放缓

jnr*_*jnr 5 performance grails groovy java-8 metaspace

我刚刚从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 ms

Metaspace在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\
Run Code Online (Sandbox Code Playgroud)

当MaxMetaspaceSize设置为512M时,运行几个小时后我的应用程序每小时减速1或2次.响应时间大约是10秒.

谁有这样的问题?在你的应用程序中,元空间对性能有这样的影响吗?

Mic*_*ulc 1

您对您的应用程序进行过概要分析吗?

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