作为服务运行时 OperatingSystemMXBean.getSystemCpuLoad 不起作用

AAG*_*AAG 5 java cpu-load

我们有一段代码需要监控CPU负载。我们通过以下代码行获取 CPU 负载:

((com.sun.management.OperatingSystemMXBean) ManagementFactory
  .getOperatingSystemMXBean()).getSystemCpuLoad();
Run Code Online (Sandbox Code Playgroud)

在测试期间,这工作得很好。

当部署到 2012 Windows Server 并作为 Service 运行时, getSystemCpuLoad 始终返回 -1。

如果我们停止该服务并将其作为应用程序运行(仍在 2012 Window Server 计算机上),它会再次运行。

我查看了类路径差异和环境变量差异,但找不到任何差异。

有谁知道为什么 getSystemCpuLoad 在应用程序中运行时有效,但不能作为服务运行?

AAG*_*AAG 5

我终于找到了导致问题的原因。如果其他人遇到这种情况:

我必须将服务正在运行的用户添加到“性能日志用户”组中。一旦添加到这里,我就能够获取系统 CPU 负载。