我需要在服务器上运行cpu load monitor。我想为此目的创建一个单独的进程,而不是检测一堆凌乱的服务器应用程序代码。问题很简单:
如何使用Java获取系统CPU使用率(整体和每个核心,以百分比表示)?
我已经检查了OperatingSystemMXBean.getSystemLoadAverage()
,但它给了我最后一分钟的平均系统CPU负载,这对我来说太长了。我需要每秒(或更少)监控负载。除此之外,还给出了整个系统的CPU负载。
最后,是否有可能获得属于另一个Java进程的线程的cpu使用?
答案 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。 (如果需要,您可以从中计算利用率)