当作为服务运行时,OperatingSystemMXBean.getSystemCpuLoad无法工作。

5

我们有一段需要监控 CPU 负载的代码。我们可以使用以下代码行获取 CPU 负载:

((com.sun.management.OperatingSystemMXBean) ManagementFactory
  .getOperatingSystemMXBean()).getSystemCpuLoad();

测试期间,这个功能运行正常。

当部署到作为服务运行的2012 Windows服务器时,getSystemCpuLoad总是返回-1。

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

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

有人知道为什么在应用程序中运行时getSystemCpuLoad正常工作,而作为服务运行时却不行吗?


就这个问题而言,这里调用了本地代码OperatingSystemImpl.c,但是其中有太多的return -1让我无法追踪。 - Hugues M.
1个回答

5

我终于找到了问题的原因。如果有其他人遇到这个问题:

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


“Performance Log Users” 组不够用,我在 Windows Server 2016 上的情况下还需要 “Performance Monitor Users” 组。参见:https://support.microsoft.com/zh-cn/topic/error-message-when-you-try-to-access-the-performance-monitor-perfmon-exe-on-a-remote-computer-access-is-denied-cedd0c42-4fd6-fa4a-47fd-d86c7b456ace - didlich

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接