【问题标题】:Java Management API Get CPU Usage [duplicate]Java管理API获取CPU使用率[重复]
【发布时间】:2017-03-12 20:07:39
【问题描述】:

我想在我的应用程序中监控系统指标。我使用 Spring Boot Actuator,但它没有任何关于 CPU 使用率的指标。我知道 Spring Boot Actuator 上的此类指标从这里检索:

OperatingSystemMXBean

它有如下方法:

getSystemLoadAverage
getAvailableProcessors

还有一个类:

MemoryUsage

您可以在其中检索此类指标:

getUsed
getCommitted

但是,我在java.lang.management 上看不到任何有关 Java 应用程序 CPU 使用率的指标。如何找回?

【问题讨论】:

  • @AndrewLi SystemCpuLoad 是否等于 getSystemLoadAverage/getAvailableProcessors ?
  • 没有。 getSystemCpuLoad 返回整个系统最近的 CPU 使用率。查看副本
  • 实际上,我需要当前Java应用程序的CPU使用率,就像堆使用率一样。这就是为什么我需要一个不同于副本的解决方案。
  • getProcessCpuLoad()

标签: java


【解决方案1】:

您说的是 java.lang.management 包的 OperatingSystemMXBean 类。 com.sun.management 包中有同名类。 在这个类中,关于 cpu info 的方法很少:

double  getProcessCpuLoad()
long    getProcessCpuTime()
double  getSystemCpuLoad()

这是访问 bean 和检索 cpu 负载信息的代码:

import java.lang.management.ManagementFactory;
import com.sun.management.OperatingSystemMXBean;

OperatingSystemMXBean bean = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean();
System.out.println(bean.getProcessCpuLoad());

请注意,强制转换是必要的,因为您需要的类在 java.sun.management 包中,而不是在 java.lang.management 中。 如果你使用 eclipse 可能会遇到一些访问限制的问题,如果发生这种情况你可以很容易地修复它in this way

【讨论】:

    【解决方案2】:

    只是建议,我认为我们不应该在我们的应用程序中使用测量,因为除了我们应用程序的工作量之外,还有测量的工作量,所以结果不再是准确的
    在这种情况下,Jconsole 或 Visualvm 是您可以关注的出色外部工具。不仅是springboot,你还可以测量所有的java应用类型。

    【讨论】:

    • 我有一些微服务,我的一个应用程序是一个监控其他应用程序的仪表板。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-16
    • 1970-01-01
    • 2013-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多