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()
-1を返すWindowsの場合)。
もともとGPLの下でライセンスされていましたが、Apache 2.0に変更されました。これは一般に、クローズドソースの商用製品に使用できます。