如何为Java 8确定元空间的理想大小

Ris*_*ale 6 java jvm java-8 metaspace

我们正在将Web应用程序从Java 7迁移到Java8。我们已经定义了PermSizejvm param参数。

由于Java 8会忽略此参数,因此不再使用。元空间是Java 8中引入的,其默认大小随动态增长而不受限制(限于物理内存)。

我的问题是我是否需要为metaspacejvm参数确定Web应用程序的最佳值,或者使用default是一个好主意?

更新

有关Web应用程序的更多信息:Web应用程序基于strutsspring框架。通常4k每分钟需要请求数。此应用程序部署在tomcat 8.5上,并且不承载任何其他Web应用程序。但是,同一虚拟机上运行着多个tomcat实例。当前-Xms-Xmx值设置为1g

Abs*_*ind 6

您可以考虑以下多项内容:

  1. 初始元空间大小:在启动应用程序时,由于JVM必须调整元空间的大小,您看到负面和可衡量的影响吗?然后,您可能应该设置最小大小。仍然我会尽量避免这种情况,因为这会在应用程序增长时很容易被忘记。-XX:MetaspaceSize=<NNN>

  2. 最大元空间大小:当元空间增长到特定大小时,您是否希望应用程序失败?还是要限制服务器在这方面占用的资源?然后,您应该为元空间设置最大大小-XX:MaxMetaspaceSize=<NNN>

  3. Metaspace Free Ratio:您是否动态加载许多不同的类?然后,您可以在元空间上定义一个自由比率,以便始终有足够的空间用于新类,并且在紧急情况下不需要调整大小。-XX:MinMetaspaceFreeRatio=<NNN>-XX:MaxMetaspaceFreeRatio=<NNN>

我的建议是坚持默认设置,对其进行测试,仅在需要时做出反应。

  • -XX:MetaspaceSize不设置初始大小。它设置了阈值,该阈值将在首次超过该阈值时触发垃圾回收。 (10认同)