Spring boot SpringBoot执行器system.cpu.count度量和system.cpu.usage度量之间的关系

Spring boot SpringBoot执行器system.cpu.count度量和system.cpu.usage度量之间的关系,spring-boot,spring-boot-actuator,micrometer,Spring Boot,Spring Boot Actuator,Micrometer,我只是想从SpringBoot 2.3.1执行器度量端点获得一些关于system.cpu.count度量和system.cpu.usage度量之间关系的澄清 例如,在我的例子中: /exactor/metrics/system.cpu.count的值为:2 /exactor/metrics/system.cpu.usage的值为:0.024765603908878 这是否意味着我的cpu利用率百分比为:0.024765603908878/2*100=1.24%?这些指标在Spring Boot中

我只是想从SpringBoot 2.3.1执行器度量端点获得一些关于system.cpu.count度量和system.cpu.usage度量之间关系的澄清

例如,在我的例子中:

/exactor/metrics/system.cpu.count的值为:2

/exactor/metrics/system.cpu.usage的值为:0.024765603908878


这是否意味着我的cpu利用率百分比为:0.024765603908878/2*100=1.24%?

这些指标在Spring Boot中按千分尺,特别是千分尺提供。查看其源代码,我们可以了解到
system.cpu.count
java.lang.Runtime.availableProcessors()
支持,而
system.cpu.usage
com.sun.management.OperatingSystemMXBean.getSystemCpuLoad()支持。查看这些方法可以告诉我们:

  • system.cpu.count
    是JVM可用的cpu数量
  • system.cpu.usage
    是一个介于0.0和1.0之间的值,其中0.0表示所有cpu在最近观察到的时间段内处于空闲状态,而1.0表示所有cpu在最近观察到的时间段内100%处于活动运行状态

您的值0.025表示CPU利用率为其总容量的2.5%。由于您有两个CPU,这可能是一个CPU以5%的速度运行,另一个CPU以0%的速度运行,两个CPU都以2.5%的速度运行,或者两者之间的任何其他组合。

这些指标在Spring Boot by Millimum中提供,特别是通过Millimum。查看其源代码,我们可以了解到
system.cpu.count
java.lang.Runtime.availableProcessors()
支持,而
system.cpu.usage
com.sun.management.OperatingSystemMXBean.getSystemCpuLoad()支持。查看这些方法可以告诉我们:

  • system.cpu.count
    是JVM可用的cpu数量
  • system.cpu.usage
    是一个介于0.0和1.0之间的值,其中0.0表示所有cpu在最近观察到的时间段内处于空闲状态,而1.0表示所有cpu在最近观察到的时间段内100%处于活动运行状态

您的值0.025表示CPU利用率为其总容量的2.5%。由于您有两个CPU,这可能是一个CPU以5%的速度运行,另一个CPU以0%的速度运行,两个CPU都以2.5%的速度运行,或者两者之间的任何其他组合。

Andy,我想知道system.CPU.usage是否仍然是一个良好/准确的指标,而应用程序在docker容器中运行,而此容器又在kubenetes中运行。在我的例子中,我将pod限制为1个cpu,并在运行时运行一些负载:kubectl top pod cpu demo--namespace=cpu示例:cpu(核心)内存(字节)989m 427Mi,这几乎是100%的cpu利用率。但是,/exactor/metrics/system.cpu.usage的值仍然很低:0.0741890070728695有什么想法吗?这取决于JVM对容器的感知程度。我相信,在尊重cgroup限制等方面,Java的最新版本已经有所改进。我不确定它会如何影响JVM对CPU负载的看法。嗨,Andy,我只是想知道当应用程序在docker容器中运行时,system.CPU.usage是否仍然是一个好的/准确的指标,而这个容器又在kubenetes中运行。在我的例子中,我将pod限制为1个cpu,并在运行时运行一些负载:kubectl top pod cpu demo--namespace=cpu示例:cpu(核心)内存(字节)989m 427Mi,这几乎是100%的cpu利用率。但是,/exactor/metrics/system.cpu.usage的值仍然很低:0.0741890070728695有什么想法吗?这取决于JVM对容器的感知程度。我相信,在尊重cgroup限制等方面,Java的最新版本已经有所改进。我不确定它是如何影响JVM对CPU负载的看法的。