elasticsearch,Java,elasticsearch" /> elasticsearch,Java,elasticsearch" />

Java ElasticSearch如何计算内存压力?

Java ElasticSearch如何计算内存压力?,java,elasticsearch,Java,elasticsearch,我们有两个Java服务,希望将监视/警报添加到其中 我们正在从JVM收集内存使用信息。然后,我们注意到ElasticSearch有一个称为内存压力的指标,这听起来对我们的Java服务也是一个有用的指标 问题是我不知道它是如何工作的。我试着在他们的电脑上搜索代码中的“记忆压力”,但没有结果 当我试图寻找公式或解释它是如何计算这一点的时候,我总会找到同样的两篇文章:和 这些很好地解释了如何解释ElasticSearch计算的值,但没有解释它是如何计算的 有人知道ElasticSearch记忆压力计算

我们有两个Java服务,希望将监视/警报添加到其中

我们正在从JVM收集内存使用信息。然后,我们注意到ElasticSearch有一个称为内存压力的指标,这听起来对我们的Java服务也是一个有用的指标

问题是我不知道它是如何工作的。我试着在他们的电脑上搜索代码中的“记忆压力”,但没有结果

当我试图寻找公式或解释它是如何计算这一点的时候,我总会找到同样的两篇文章:和

这些很好地解释了如何解释ElasticSearch计算的值,但没有解释它是如何计算的


有人知道ElasticSearch记忆压力计算在引擎盖下是如何工作的吗?

如您提到的第三个链接所述:

JVM内存压力指示器实际上是旧代池的填充率

所以这只是旧池使用率的百分比

检索
GET\u节点/stats
时,您将获得以下有关JVM度量的信息:

  ...
  "jvm" : {
    "timestamp" : 1614957874986,
    "uptime_in_millis" : 274397434,
    "mem" : {
      "heap_used_in_bytes" : 20094897664,
      "heap_used_percent" : 65,
      "heap_committed_in_bytes" : 30836523008,
      "heap_max_in_bytes" : 30836523008,
      "non_heap_used_in_bytes" : 310525488,
      "non_heap_committed_in_bytes" : 321077248,
      "pools" : {
        "young" : {
          "used_in_bytes" : 6710886400,
          "max_in_bytes" : 0,
          "peak_used_in_bytes" : 12264144896,
          "peak_max_in_bytes" : 0
        },
        "old" : {
          "used_in_bytes" : 13098798592,
          "max_in_bytes" : 30836523008,
          "peak_used_in_bytes" : 14881037312,
          "peak_max_in_bytes" : 30836523008
        },
        "survivor" : {
          "used_in_bytes" : 285212672,
          "max_in_bytes" : 0,
          "peak_used_in_bytes" : 1300234240,
          "peak_max_in_bytes" : 0
        }
      }
    },
因此,记忆压力可通过以下公式简单计算:

100 * jvm.mem.pools.old.used_in_bytes / jvm.mem.pools.old.max_in_bytes 
在我的例子中,它的收益率为42%,可以在下面的屏幕截图上看到


非常感谢您的解释!一定是接近周末了,或者是我读了3遍左右的东西!太棒了,很高兴它有帮助!