gpt4 book ai didi

java - 设置 MetaspaceSize 的指南 - java 8

转载 作者:搜寻专家 更新时间:2023-10-31 20:17:58 26 4
gpt4 key购买 nike

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

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

JVM 堆最大大小设置为 6GB,但出现此问题时,我们看到仅使用了 3GB 堆。元空间增长很少,几乎总是满的。我尝试将元空间增加到 1GB,它提高了吞吐量。

我认为正在发生的事情是默认情况下将元空间设置为非常低的值,因此 GC 开始。每次 GC 发生时,高水位线都会不断增加(再次增加非常低的数量)。

我想设置 MetaspaceSize(不确定当前值是多少)。

Oracle 文档说没有指南可以知道将 MetaspaceSize 设置为什么。但是有没有办法找出将其设置为正确的值?

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

如果类元数据的可用提交空间占类元数据的总提交空间的百分比大于 MaxMetaspaceFreeRatio,则高水位线将降低。如果它小于 MinMetaspaceFreeRatio,那么将提高高水位线。

但仍然无法弄清楚如何稳定 GCs..我有三个问题:

  1. 64 位服务器上的默认 MetaspaceSize 是多少?
  2. 默认比率是多少:MaxMetaspaceFreeRatio、MinMetaspaceFreeRatio 设置为?答:显示Min为40,Max为70
  3. 如何决定元空间大小的值?

最佳答案

MetaspaceSize 是触发 Full GC 时的值,它不是初始空间也不是最大空间。

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

java -XX:+PrintFlagsFinal -version | grep MetaspaceSize

将产生:

size_t MetaspaceSize = 21807104 // 20MB

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

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

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

[Full GC (Metadata GC Threshold) ...]

并从中了解您需要设置什么以及如何设置。

或者开始这个过程:

java -XX:NativeMemoryTracking=detail

通过以下方式连接到 PID:

jcmd <YourJVMPID> VM.metaspace

然后找到像这样的行:

 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

并在应用运行至少一天恕我直言后从非类空间获取值。

关于如何控制Metaspace还有各种其他设置,你可以这样找到:

java -XX:+PrintFlagsFinal -version | grep Metaspace

关于java - 设置 MetaspaceSize 的指南 - java 8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36465192/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com