【发布时间】:2014-08-02 03:05:43
【问题描述】:
我有一个 java 监控应用程序,用于监控 linux 上的 CPU(以及其他东西)。
我正在使用 Sigar 来获取我的进程的 CPU 使用率。 http://cpansearch.perl.org/src/DOUGM/hyperic-sigar-1.6.3-src/docs/javadoc/org/hyperic/sigar/Sigar.html#getProcCpu%28long%29
但是,这只是在流程级别。 htop 显示我的应用程序中的线程以及每个线程使用的 CPU 百分比。
Sigar 可以做到这一点吗?
如果我在多核机器上,是否可以获得每个核心的 CPU 利用率?
我想在 CPU 长时间以 100% 运行时发出警报,并在线程列表中找出可能的罪魁祸首。
【问题讨论】:
-
您始终可以使用
Process process = Runtime.getRuntime().exec(yourcmd);执行您的命令(htop 等),然后使用process.getInputStream();从命令中读取返回的数据。 -
系统监控的困难在于它们非常依赖于操作系统。即使决定任何 jvm 实现必须提供一些 api,我想也很难定义一个适用于所有操作系统的通用 api