1. ホーム
  2. java

[解決済み】JavaでコンピュータのCPU、メモリ、ディスクの使用状況を監視するには?

2022-04-12 15:17:31

質問内容

Javaで以下のシステム情報を監視したい。

  • 現在のCPU使用率** (%)
  • 使用可能メモリ*(空き容量/総容量)
  • ディスク容量(空き容量/総容量)

    *JVMだけでなく、システム全体で利用可能なメモリ全体を意味していることに注意してください。

私は、自分のコードが外部プログラムを呼び出したり、JNIを使用することに依存しないクロスプラットフォームのソリューション(Linux、Mac、Windows)を探しています。これらは実行可能なオプションですが、もし誰かがより良いソリューションを既に持っているならば、OS固有のコードを自分でメンテナンスすることは避けたいと思います。

もし、これを信頼できるクロスプラットフォームな方法で行う無料のライブラリがあれば、それは素晴らしいことです(外部呼び出しやネイティブコード自体を使用するものであっても)。

何かご提案があれば、ぜひお願いします。

明確にするために、私は、Javaプロセス(es)だけでなく、システム全体の現在のCPU使用率を取得したいです。

SIGAR APIは、私が探しているすべての機能を1つのパッケージで提供しているので、今のところ私の質問に対するベストアンサーです。しかし、GPLの下でライセンスされているため、私の本来の目的(クローズドソース、商用製品)には使用できません。HypericがSIGARを商用利用するためにライセンスする可能性はありますが、私は調べていません。私のGPLプロジェクトでは、将来的にSIGARを必ず検討するつもりです。

現在の私のニーズとしては、以下のものに傾いています。

  • CPUの使用率について。 OperatingSystemMXBean.getSystemLoadAverage() / OperatingSystemMXBean.getAvailableProcessors() (CPUごとの負荷平均)
  • メモリの場合 OperatingSystemMXBean.getTotalPhysicalMemorySize()OperatingSystemMXBean.getFreePhysicalMemorySize()
  • ディスク容量について File.getTotalSpace()File.getUsableSpace()

制限事項

getSystemLoadAverage() とディスクスペースの問い合わせ方法は、Java 6でのみ利用可能です。また、一部のJMXの機能は、すべてのプラットフォームで利用できるわけではありません(例えば、以下のようなことが報告されています。 getSystemLoadAverage() は Windows では -1 を返します)。

本来はGPLでライセンスされていますが は変更されました。 から アパッチ2.0 これは、一般的にクローズドソースの商用製品に使用することができます。

解決するには?

先程の内容に沿って この記事で . を使うことをお勧めします。 SIGAR API . 私は自分のアプリケーションの1つでSIGAR APIを使っていますが、これは素晴らしいものです。 安定していて、よくサポートされており、有用な例でいっぱいであることがわかるでしょう。 このAPIはオープンソースで <ストライク GPL 2 Apache 2.0ライセンスです。 チェックしてみてください。 あなたのニーズを満たすことができると思います。

JavaとSigar APIを使って、メモリ、CPU、ディスク、ロードアベレージ、ネットワークインターフェース情報とメトリクス、プロセステーブル情報、ルート情報などを取得することができます。