如何在Java中获得cpu load(%),整体和每个核心?

时间:2013-09-08 19:42:10

标签: java monitoring cpu

我需要在服务器上运行cpu load monitor。我想为此目的创建一个单独的进程,而不是检测一堆凌乱的服务器应用程序代码。问题很简单:

如何使用Java获取系统CPU使用率(整体和每个核心,以百分比表示)?

我已经检查了OperatingSystemMXBean.getSystemLoadAverage(),但它给了我最后一分钟的平均系统CPU负载,这对我来说太长了。我需要每秒(或更少)监控负载。除此之外,还给出了整个系统的CPU负载。

最后,是否有可能获得属于另一个Java进程的线程的cpu使用?

1 个答案:

答案 0 :(得分:1)

您需要在mpstat的Linux上运行Runtime.exec()并解析输出。我不知道Windows上是否有类似内容。

$ mpstat -A 10
Linux 3.8.0-27-generic (peter-hex)  08/09/13    _x86_64_    (12 CPU)

21:04:39     CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
21:04:49     all    0.27    0.00    0.18    0.00    0.00    0.00    0.00    0.00   99.55
21:04:49       0    0.40    0.00    0.20    0.00    0.00    0.00    0.00    0.00   99.40
21:04:49       1    0.80    0.00    0.50    0.00    0.00    0.00    0.00    0.00   98.70
21:04:49       2    0.50    0.00    0.40    0.00    0.00    0.00    0.00    0.00   99.10
21:04:49       3    0.80    0.00    0.50    0.00    0.00    0.00    0.00    0.00   98.70
21:04:49       4    0.10    0.00    0.20    0.00    0.00    0.00    0.00    0.00   99.70
21:04:49       5    0.70    0.00    0.40    0.00    0.00    0.00    0.00    0.00   98.90
21:04:49       6    0.10    0.00    0.00    0.00    0.00    0.00    0.00    0.00   99.90
21:04:49       7    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
21:04:49       8    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
21:04:49       9    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
21:04:49      10    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
21:04:49      11    0.00    0.00    0.10    0.00    0.00    0.00    0.00    0.00   99.90
  

是否可以获得属于另一个Java进程的线程的cpu使用情况?

是的,您可以使用ps -eLf并查看系统上的所有主题。这为您提供自启动以来使用的CPU。 (如果需要,您可以从中计算利用率)