0

我需要在服务器上运行 CPU 负载监视器。我想为此目的创建一个单独的进程,而不是检测一大堆服务器应用程序代码。问题很简单:

如何使用 Java 获取系统 cpu 使用率(总体和每个核心,以百分比为单位)?

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

最后,是否可以获取属于另一个 Java 进程的线程的 cpu 使用率?

4

1 回答 1

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。(如果需要,您可以从中计算利用率)

于 2013-09-08T20:06:11.323 回答