首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >设置MetaspaceSize - java 8的指南

设置MetaspaceSize - java 8的指南
EN

Stack Overflow用户
提问于 2016-04-07 01:34:39
回答 3查看 37.9K关注 0票数 17

64位服务器的MetaspaceSize默认值是多少?我在官方文件里找不到。

我观察到,在服务器JVM进程中,有时GC频率会变得很高并不断增长。如果我重新启动服务几次,它就会恢复稳定。我认为这是由于JRE的升级。

大小被设置为6GB,但当出现此问题时,我们只看到使用3GB堆。梅特斯帕斯长得很小,而且几乎总是满的。我尝试将metaspace提高到1GB,它提高了吞吐量。

我认为,在默认情况下,Metaspace被设置为一个非常低的值,因此GC启动。每当发生GC时,高水点就会持续增加(同样是以极低的数量)。

我想设置MetaspaceSize (不确定当前值是什么)。

Oracle说,没有指南可以知道将MetaspaceSize设置为什么。但是有什么方法可以找出设置它的正确值吗?

我从Oracle文档中得到的一个提示是:

If the committed space available for class metadata as a percentage of the total committed space for class metadata is greater than MaxMetaspaceFreeRatio, then the high-water mark will be lowered. If it is less than MinMetaspaceFreeRatio, then the high-water mark will be raised.

但我还是想不出如何稳定GCs。我有三个问题:

  1. 64位服务器上的默认MetaspaceSize是什么?
  2. 默认比率是什么: MaxMetaspaceFreeRatio,MinMetaspaceFreeRatio设置为?答:它显示民40岁,最大70岁。
  3. 如何确定Metaspacesize值?
EN

回答 3

Stack Overflow用户

发布于 2019-11-19 19:57:21

MetaspaceSizeFull GC将被触发的值,它既不是初始空间,也不是最大空间。

它的默认值是20MB (至少在jdk-8jdk-13上是这样):

代码语言:javascript
运行
复制
java -XX:+PrintFlagsFinal -version | grep MetaspaceSize

将产生:

代码语言:javascript
运行
复制
size_t MetaspaceSize = 21807104 // 20MB

这意味着,当Metaspace到达20MB时,将触发一个Full GC,如果您能够避免它,那就太好了。

考虑到数据元空间可以容纳多少数据(方法、注释等),在我看来,20MB是一个非常小的值。不幸的是,选择正确的值并不容易。

您有两个选项,启用gc日志记录-Xlog:gc,让应用程序运行一段时间,然后找到如下实例:

代码语言:javascript
运行
复制
[Full GC (Metadata GC Threshold) ...]

从这些中了解你需要设置什么以及如何设置。

或以下列方式启动该过程:

代码语言:javascript
运行
复制
java -XX:NativeMemoryTracking=detail

通过以下方式连接到PID

代码语言:javascript
运行
复制
jcmd <YourJVMPID> VM.metaspace

找到这样的线条:

代码语言:javascript
运行
复制
 Virtual space:
    Non-class space:        8.00 MB reserved,       4.25 MB ( 53%) committed
    Class space:            1.00 GB reserved,     512.00 KB ( <1%) committed
    Both:                   1.01 GB reserved,       4.75 MB ( <1%) committed

在应用程序运行了至少一天之后,从Non-class space中获取值。

关于如何控制Metaspace,还有其他各种设置,如下所示:

代码语言:javascript
运行
复制
java -XX:+PrintFlagsFinal -version | grep Metaspace
票数 15
EN

Stack Overflow用户

发布于 2017-09-27 17:39:16

我认为最有趣的问题是#3,所以我会先回答这个问题。我的方法是使用以下设置运行我的应用程序24小时,并打开gc日志记录:

代码语言:javascript
运行
复制
-XX:+PrintGC
-XX:+PrintGCDetails
-XX:+PrintGCDateStamps
-XX:+PrintGCCause
-XX:+PrintTenuringDistribution
-XX:+PrintGCApplicationStoppedTime
-XX:+PrintGCApplicationConcurrentTime
-Xloggc:gc.log

然后我做了这个:

代码语言:javascript
运行
复制
grep Metaspace gc.log

看到“使用”的价值迅速增长到8000万.所以我把MetaspaceSize设为100米

代码语言:javascript
运行
复制
-XX:MetaspaceSize=100M

你看-没有更多的gcs因为梅斯帕斯。

看起来,@Pillar的评论回答了您关于如何确定实现的默认Metaspace设置的前两个问题.为了完整起见,我将把它包括在这里:

代码语言:javascript
运行
复制
java -XX:+UnlockDiagnosticVMOptions -XX:+PrintFlagsFinal -version -XX:+UseG1GC | grep Metaspace

从技术上讲,@Pillar的注释并没有告诉您任何64位服务器的默认Metaspace大小,但这是因为您的第一个问题有点误导,因为根据文档,这些默认值在每个实现中有所不同。

请参见:

https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/considerations.html

具体来说,底部的部分写着,“MetaspaceSize的默认大小依赖于平台,范围从12 MB到20 MB”。

票数 10
EN

Stack Overflow用户

发布于 2019-08-02 15:28:40

从Java 8开始,可以使用以下命令行选项来控制两个最重要的metaspace设置:

  • -XX:MetaspaceSize=N --当最初为类元数据提交的空间达到此级别时,将产生垃圾收集;级别随后可能会根据收集结果而提高或降低,
  • -XX:MaxMetaspaceSize=N -设置元空间的最大大小。

引用https://docs.oracle.com/javase/10/gctuning/other-considerations.htm#JSGCT-GUID-B29C9153-3530-4C15-9154-E74F44E3DAD9的话,

  • “在卸载相应的Java类时,会释放类元数据。Java类由于垃圾收集而被卸载,垃圾回收可能被诱导卸载类并释放类元数据。当提交给类元数据的空间达到一定级别(高水标记)时,就会产生垃圾收集。垃圾收集之后,可以根据从类元数据中释放的空间大小来提高或降低高水标记。高水位标志将被提高,以免过早导致另一次垃圾收集。高水标记最初被设置为命令行选项-XX:MetaspaceSize__的值。..。-XX:MetaspaceSize的默认大小与平台有关,范围从12 MB到20 MB。“
  • “默认情况下,可用于类元数据的本机内存量是无限的。使用选项-XX:MaxMetaspaceSize对用于类元数据的本机内存量设置上限。”

WildFly应用服务器将standalone.conf中的metaspace选项分别设置为96 MB / 256 MB,如下所示:

代码语言:javascript
运行
复制
... -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m ...

但是,在大型生产应用程序中,MaxMetaspaceSize可能需要大得多,因为它需要包含应用程序中所有加载类的元数据,您可能希望为MetaspaceSize指定一个更高的值,以避免早期的垃圾回收。

还请参阅@Eugene的答案,以了解如何经验地确定metaspace设置。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36465192

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档