Javaで次のシステム情報を監視したいと思います。
- 現在のCPU使用率**(パーセント)
- 使用可能なメモリ*(空き/合計)
使用可能なディスク容量(空き/合計)
*つまり、JVMだけでなく、システム全体で使用可能なメモリ全体を意味することに注意してください。
外部プログラムを呼び出したり、JNIを使用したりする自分のコードに依存しないクロスプラットフォームソリューション(Linux、Mac、およびWindows)を探しています。これらは実行可能なオプションですが、誰かがすでにより良い解決策を持っている場合は、OS固有のコードを自分で維持したくないと思います。
信頼性の高いクロスプラットフォームの方法でこれを行う無料のライブラリがあれば、それは素晴らしいことです(外部呼び出しを行ったり、ネイティブコード自体を使用したりする場合でも)。
どんな提案でも大歓迎です。
明確にするために、Javaプロセスだけでなく、システム全体の現在の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の下でライセンスされていましたが、 Apache 2.0に変更されました。これは通常、クローズドソースの商用製品に使用できます。