如何确定 java 8 元空间的理想大小
How to determine the ideal size for an Metaspace for java 8
我们正在将 Web 应用程序从 Java 7 迁移到 Java 8。我们已经定义了 PermSize
jvm 参数。
因为Java8会忽略这个参数,所以这个是none的用处。 Metaspace 在 Java8 中被引入,它的默认大小是无限的(限于物理内存)并且动态增长。
我的问题是我是否需要为 metaspace
jvm 参数找出我的 Web 应用程序的最佳值,或者使用默认值是个好主意?
更新:
关于我的网络应用程序的更多信息:
我的 Web 应用程序基于 struts
和 spring
框架。通常需要 4k
requests/min。此应用程序部署在 tomcat 8.5 上,它不托管任何其他 Web 应用程序。但是,在同一个虚拟机上有多个 tomcat 个实例 运行。当前 -Xms
和 -Xmx
值设置为 1g
.
Metaspace 的引入是为了解决 java 的内存不足问题 (IIRC),当涉及到上述动态内存 growth/allocation 的垃圾回收时。
在生产环境中,我要说的并不是那么可行,而是:尝试一下。我个人从未对默认动态设置有任何问题,但我想这将取决于应用程序的大小和压力。现在,假设默认设置是合适的。
这里有很多你可以考虑的事情:
初始元space 大小:由于 JVM 必须调整元space 的大小,您在启动应用程序时是否看到负面和可衡量的影响?那么你应该设置最小尺寸。我仍然会尽量避免这种情况,因为随着应用程序的增长,这种设置很容易被遗忘。 -XX:MetaspaceSize=<NNN>
最大元space 大小:您是否希望您的应用程序在元space 增长到特定大小时失败?或者你想限制服务器在这方面占用的资源?那么你应该为 metaspace -XX:MaxMetaspaceSize=<NNN>
设置一个最大大小
Metaspace 免费比率:您是否动态加载许多不同的 类?然后你可以在 metaspace 上定义一个自由比率,这样新的 类 总是有足够的 space 可用,并且在关键情况下不需要调整大小。 -XX:MinMetaspaceFreeRatio=<NNN>
和 -XX:MaxMetaspaceFreeRatio=<NNN>
我的建议是坚持默认设置,对其进行测试,仅在需要时才做出反应。
霍尔格是对的。它有明确的记录 here,我可以在这里引用它。
-XX:MetaspaceSize=size
Sets the size of the allocated class metadata space that will trigger a garbage collection the first time it is exceeded. This threshold for a garbage collection is increased or decreased depending on the amount of metadata used. The default size depends on the platform.
直接引用但重点是我的;)
我们正在将 Web 应用程序从 Java 7 迁移到 Java 8。我们已经定义了 PermSize
jvm 参数。
因为Java8会忽略这个参数,所以这个是none的用处。 Metaspace 在 Java8 中被引入,它的默认大小是无限的(限于物理内存)并且动态增长。
我的问题是我是否需要为 metaspace
jvm 参数找出我的 Web 应用程序的最佳值,或者使用默认值是个好主意?
更新:
关于我的网络应用程序的更多信息:
我的 Web 应用程序基于 struts
和 spring
框架。通常需要 4k
requests/min。此应用程序部署在 tomcat 8.5 上,它不托管任何其他 Web 应用程序。但是,在同一个虚拟机上有多个 tomcat 个实例 运行。当前 -Xms
和 -Xmx
值设置为 1g
.
Metaspace 的引入是为了解决 java 的内存不足问题 (IIRC),当涉及到上述动态内存 growth/allocation 的垃圾回收时。
在生产环境中,我要说的并不是那么可行,而是:尝试一下。我个人从未对默认动态设置有任何问题,但我想这将取决于应用程序的大小和压力。现在,假设默认设置是合适的。
这里有很多你可以考虑的事情:
初始元space 大小:由于 JVM 必须调整元space 的大小,您在启动应用程序时是否看到负面和可衡量的影响?那么你应该设置最小尺寸。我仍然会尽量避免这种情况,因为随着应用程序的增长,这种设置很容易被遗忘。
-XX:MetaspaceSize=<NNN>
最大元space 大小:您是否希望您的应用程序在元space 增长到特定大小时失败?或者你想限制服务器在这方面占用的资源?那么你应该为 metaspace
-XX:MaxMetaspaceSize=<NNN>
设置一个最大大小
Metaspace 免费比率:您是否动态加载许多不同的 类?然后你可以在 metaspace 上定义一个自由比率,这样新的 类 总是有足够的 space 可用,并且在关键情况下不需要调整大小。
-XX:MinMetaspaceFreeRatio=<NNN>
和-XX:MaxMetaspaceFreeRatio=<NNN>
我的建议是坚持默认设置,对其进行测试,仅在需要时才做出反应。
霍尔格是对的。它有明确的记录 here,我可以在这里引用它。
-XX:MetaspaceSize=size Sets the size of the allocated class metadata space that will trigger a garbage collection the first time it is exceeded. This threshold for a garbage collection is increased or decreased depending on the amount of metadata used. The default size depends on the platform.
直接引用但重点是我的;)