OperatingSystemMXBean を使用して CPU 使用率を取得する 質問する

OperatingSystemMXBean を使用して CPU 使用率を取得する 質問する

現在実行中の Java 仮想マシンで使用されている CPU の割合を Java を使用して取得しようとしています。調査の結果、com.sun.management.OperatingSystemMXBeanクラスを使用する必要があることがわかりました。オンラインの例に従って、次のように記述しました。

import java.lang.management.ManagementFactory;
import com.sun.management.OperatingSystemMXBean;


public class TestClass {

public static void main (String[] args) {
    OperatingSystemMXBean bean = (com.sun.management.OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean();

    System.out.println(bean.getProcessCpuLoad());
    System.out.println(bean.getSystemCpuLoad());

    }

}

これを2台のマシンでテストしたところ、どちらの呼び出しでも結果が返ってきます-1.0。Java 7と6の64ビット版と32ビット版の両方でこのコードを実行してみましたが、それでも、次のような出力しか得られません-1.0Javadocsによると

All values betweens 0.0 and 1.0 are possible depending of the activities going on in the system. If the system recent cpu usage is not available, the method returns a negative value.

ここで他に何をすればよいかわかりません。CPU 負荷を取得することは重要であり、Sigar などの別のライブラリの使用は避けたいと思います。この問題に関して、何か推奨事項や知見をお持ちの方はいらっしゃいますか?

ベストアンサー1

誰かの役に立つかもしれないので、自分の質問に答えるだけです。

私が行っていたことは技術的には正しかったのですが、OperatingSystemMXBeanCPU 使用率情報を収集するのに十分な時間を与えていませんでした。CPU 使用率情報を収集するには、JVM が実際に数秒間実行されている必要があり、その後の更新解像度は実装に依存するようです。

次のように変更したコードを実行すると、私のマシンでは約 2 秒後に使用状況情報が生成され始めます。

public static void main(String[] args) {
    OperatingSystemMXBean bean = (com.sun.management.OperatingSystemMXBean) ManagementFactory
            .getOperatingSystemMXBean();

    while (true) {
        System.out.println(bean.getProcessCpuLoad());
        System.out.println(bean.getSystemCpuLoad());
    }

}

これが誰かの助けになれば幸いです

おすすめ記事