获取操作系统级别的系统信息

我目前正在构建一个 Java 应用程序,该应用程序最终可以在许多不同的平台上运行,但主要是 Solaris、Linux 和 Windows 的变体。

是否有人能够成功提取信息,例如当前使用的磁盘空间、CPU 利用率和底层操作系统中使用的内存? Java 应用程序本身正在消耗什么?

我最好不使用 JNI 来获取此信息。

请先 登录 后评论

3 个回答

Partly Cloudy

CPU 使用率并不简单——通过 com.sun.management.OperatingSystemMXBean.getProcessCpuTime 的 java.lang.management 很接近(请参阅上面 Patrick 出色的代码片段),但请注意,它只允许访问 CPU 在您的过程。它不会告诉您在其他进程中花费的 CPU 时间,甚至不会告诉您执行与您的进程相关的系统活动所花费的 CPU 时间。

例如,我有一个网络密集型 Java 进程——它是唯一运行的进程,CPU 为 99%,但其中只有 55% 被报告为“处理器 CPU”。

甚至不要让我开始“平均负载”,因为它几乎没用,尽管它是 MX bean 上唯一与 cpu 相关的项目。如果只是太阳在他们偶尔的智慧中暴露了像“getTotalCpuTime”这样的东西......

对于严格的 CPU 监控,Matt 提到的 SIGAR 似乎是最好的选择。

请先 登录 后评论
Community

您可以通过 java/com 集成来做到这一点。通过访问 WMI 功能,您可以获得所有信息。

请先 登录 后评论
Peter Lawrey

通常,要获取低级操作系统信息,您可以调用操作系统特定的命令,通过 Runtime.exec() 为您提供所需的信息,或在 Linux 中读取 /proc/* 等文件。

请先 登录 后评论