【问题标题】:jstat -gcmetatcapacity output MCMX values seems to be irrelevantjstat -gcmetatcapacity 输出 MCMX 值似乎无关紧要
【发布时间】:2016-06-15 06:05:13
【问题描述】:

我正在运行带有参数“-XX:MetaspaceSize=256M and -XX:MaxMetaspaceSize=256M”的jvm (java 8)。当我执行“jstat -gcmetacapacity <PID>”时,它会输出,

  MCMN       MCMX        MC       CCSMN      CCSMX       CCSC     YGC   FGC    FGCT     GCT   
       0.0  1157120.0   122880.0        0.0  1048576.0    14336.0   499     5    1.131   12.653

我希望MCMNMCMX 都是256M

这看起来类似于错误http://bugs.java.com/bugdatabase/view_bug.do?bug_id=8077987。但它已通过 MC 的文档修复程序关闭。我希望这是 jstat 错误并且 java 配置是正确的。还有其他方法可以确认吗?

Java 版本

java version "1.8.0_92"
Java(TM) SE Runtime Environment (build 1.8.0_92-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.92-b14, mixed mode)

【问题讨论】:

  • 所以你“希望它是 jstat 错误并且 java 配置是正确的”。 为什么?您的应用程序是否遇到任何问题?显然不是,否则,您在这里描述了您的实际问题。那么为什么你认为你必须完全搞乱元空间配置选项呢?
  • 由于元空间达到顶峰,我们遇到了内存不足的问题。我们增加了元空间,但仍然内存不足。因此,需要检查元空间配置是否设置正确。发布此问题后,我们发现内存不足与此相同。 stackoverflow.com/questions/33255578/…。内存不足问题现已修复。
  • 为了明确一点:没有 MaxMetaspaceSize 选项,元空间是无限,并且元空间将根据需要调整大小。如果您遇到“由于元空间撞到屋顶”的问题,那么您首先会遇到由于创建屋顶而导致的自制问题。所以问题是,您添加MaxMetaspaceSize选项之前遇到过什么样的问题?
  • 显然,如果未设置 MaxMetaspaceSize,我的应用程序将继续消耗内存,直到消耗完所有可用内存。正如我提到的,第三方库中存在导致此问题的错误。这就是我们应该使用 MaxMetaspaceSize 的原因。无论如何,我想确认它是否是 jstat 错误,以及是否有另一种方法可以确定是否为 jvm 正确设置了 maxMetaSpaceSize。
  • 对,MaxMetaspaceSize 的存在不是为了保护 JVM,而是为了保护系统的其余部分,以防 JVM 出于某种原因行为不端。它限制了 JVM 可以从系统上的操作系统和其他进程窃取的本机内存量,因此它是一个重要的保障措施,不设置它是不聪明的,除非这个 JVM 是整个服务器上唯一重要的进程。

标签: java java-8 jstat


【解决方案1】:

是的,该错误只是错误地关闭了,因为如果 -gcmetacapacity jstat 命令不遵守/报告通过 -XX:MetaspaceSize 和 -XX 施加于 JVM 的限制,它根本不会报告任何有用的东西:MaxMetaspaceSize 参数。整个 jstat 命令的存在是为了报告特定 JVM 实例的有效行为,而不是报告您的环境中可能存在的某些理论限制。元空间的理论最大容量与每个人完全无关,理论最小容量 0 也是如此。

【讨论】:

    猜你喜欢
    • 2019-04-12
    • 1970-01-01
    • 1970-01-01
    • 2019-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-22
    相关资源
    最近更新 更多