2017-08-10 116 views
1

我们正在将我们的Web应用程序从Java 7迁移到Java 8.我们已经定义了PermSize jvm参数参数。如何确定Metaspace for java的理想大小8

由于Java 8会忽略这个参数,所以这是没有用的。 Metaspace在Java 8中引入,其默认大小是无限的(限于物理内存)并且具有动态增长。

我的问题是我需要找出我的web应用程序的最佳值为metaspace jvm params或默认将是一个好主意使用?

更新

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

+1

所以我可以编辑我的答案:应用程序有多大,有多少用户在使用它?你有多个应用程序在同一台服务器上运行吗?如果您的应用程序与其他应用程序共享同一台计算机,那么您肯定希望为内存设置一些固定上限,如果耗尽资源是整个真正的问题。 – Wep0n

+0

@Wep0n,我在我的问题中更新了关于我的Web应用程序。 –

回答

3

这里有很多种东西,你可以考虑:

  1. 初始元空间大小:你看到消极的,可衡量的影响在启动时您的应用程序,因为JVM必须调整元空间?那么你应该设置最小尺寸。不过我会尽量避免这种情况,因为这会成为一个设置,在应用程序增长时很容易被遗忘。 -XX:MetaspaceSize=<NNN>

  2. 最大元空间大小:当元组空间增长到特定大小时,是否希望应用程序失败?还是你想限制服务器在这方面的资源?那么你应该设置元空间的最大尺寸-XX:MaxMetaspaceSize=<NNN>

  3. 元空间自由比率:你是否动态加载了许多不同的类?然后你可以在元空间上定义一个自由比例,这样就可以为新类提供足够的空间,并且在紧急情况下不需要调整大小。 -XX:MinMetaspaceFreeRatio=<NNN>-XX:MaxMetaspaceFreeRatio=<NNN>

我的建议是坚持到默认值,测试它,只有当有必要反应。

+2

'-XX:MetaspaceSize'不*设置初始大小。它设置了在第一次超出垃圾收集时触发垃圾收集的阈值。 – Holger

2

Metaspace的引入是一个试图修复Java的内存不足问题(IIRC),当涉及垃圾收集的动态内存增长/分配。

在生产环境中,我要说的并不是真的那么可行,但是:尝试一下。我个人从来没有对默认的动态设置有任何问题,但我想这将取决于您的应用程序的大小和压力。目前,假设默认设置是适当的。