【问题标题】:In C++ or Java is there a way to get the CPU usage?在 C++ 或 Java 中有没有办法获得 CPU 使用率?
【发布时间】:2012-06-02 23:59:10
【问题描述】:

我想编写一个小程序来显示 CPU 使用率,就像任务管理器一样。我知道中级 C++ 和 Java。有没有办法用这两种语言做到这一点?如果是这样,也许是一个简短的例子?我看到了一些 C++ 命令的页面,但我无法理解它。

我在一台计算机上使用 Windows 7,在另一台计算机上使用 XP。至于多核响应,我只想像任务管理器一样显示 CPU 使用百分比,即使是多核处理器。

【问题讨论】:

标签: java c++ cpu-usage


【解决方案1】:
double sysLoad = ManagementFactory.
                         getOperatingSystemMXBean().
                                 getSystemLoadAverage();
  • 并非适用于所有平台,
  • 返回过去一分钟的平均负载

编辑: 最近发现了这个

http://sellmic.com/blog/2011/07/21/hidden-java-7-features-cpu-load-monitoring/

在 Java 7 中,您可以使用 com.sun.management 包来获取进程负载或系统负载。

用法:

OperatingSystemMXBean osBean = ManagementFactory
        .getPlatformMXBean(com.sun.management.OperatingSystemMXBean.class);  

// What % CPU load this current JVM is taking, from 0.0-1.0  
System.out.println(osBean.getProcessCpuLoad());  

// What % load the overall system is at, from 0.0-1.0  
System.out.println(osBean.getSystemCpuLoad());  

【讨论】:

    【解决方案2】:

    “windows.h”中提供了一些系统调用函数,如GetProcessorInfo()、CallNTPowerInformation()、GetTickCount()、QueryPerformanceFrequency()、QueryPerformanceCounter()等。你可以用谷歌搜索它们,或者在 MSDN 中找到它们。我希望这个答案可以帮助你。

    【讨论】:

      【解决方案3】:

      答案将取决于平台,并且在 Java 和 C++ 案例之间有所不同。在某种程度上,您需要与特定于操作系统的 API 交互以提取统计信息。有四种可能的方法:

      • 调用适当的外部系统监控命令(特定于系统)并“抓取”命令的输出。您可以从 Java 或 C++ 执行此操作。

      • 在 C++ 中(或在 Java 中使用 JNI / JNA ...

      • 在 Java 中,使用一些现有的 3rd-party 库来处理系统特定的 JNI/JNA 内容。可能的例子包括 JavaSysMon 和 SIGAR ...虽然我不能给出具体的建议。

      • 您可以使用 Java 监控 API ...但它们不能提供足够的信息。您可以获取有关进程资源使用情况和总体平均负载的信息,但无法获取有关其他进程的信息。

      以上所有问题(可能除了最后一个)的问题是移植到新平台需要工作。

      【讨论】:

        【解决方案4】:

        CPU 使用率是操作系统属性,而不是语言属性。检索它的方式将特定于您正在使用的操作系统(您无法识别)。

        此外,“CPU 使用率”不再是一个非常模糊的术语,多核等等。

        【讨论】:

          【解决方案5】:

          在 Java 中,您可以使用 JavaSysMon 来完成此操作

          【讨论】:

            【解决方案6】:

            假设您使用的是 Windows 系统,则可以使用 Windows Management Instrumentation (WMI)。一旦你开始工作,它就很强大。我从来没有用Java做过。当然,使用 C# .NET 会更容易。 一个好的链接是WMI info

            如果你尝试这个,请告诉我。我可能有兴趣帮助你,因为这也是我的兴趣。

            【讨论】:

              【解决方案7】:

              如果您使用的是 Linux 系统,请考虑使用 shell 脚本,例如 bash。原因是 shell 脚本对于操作系统调用非常强大,例如获取进程 ID 和使用情况(pid 命令)。与 Java 或 C++ 相比,IT 技术人员更喜欢 bash 脚本。

              【讨论】:

                猜你喜欢
                • 2017-02-09
                • 1970-01-01
                • 1970-01-01
                • 2019-07-26
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2011-09-21
                相关资源
                最近更新 更多