Vorrei monitorare le seguenti informazioni di sistema in Java:
- Utilizzo corrente della CPU ** (percentuale)
- Memoria disponibile * (libera / totale)
Spazio disponibile su disco (libero / totale)
* Nota che intendo la memoria complessiva disponibile per l'intero sistema, non solo per la JVM.
Sto cercando una soluzione multipiattaforma (Linux, Mac e Windows) che non si basa sul mio codice per chiamare programmi esterni o usare JNI. Sebbene queste siano opzioni praticabili, preferirei non mantenere il codice specifico del sistema operativo se qualcuno ha già una soluzione migliore.
Se c'è una libreria gratuita là fuori che lo fa in modo affidabile e multipiattaforma, sarebbe fantastico (anche se effettua chiamate esterne o utilizza il codice nativo stesso).
Eventuali suggerimenti sono molto apprezzati.
Per chiarire, vorrei ottenere l'attuale utilizzo della CPU per l'intero sistema, non solo per i processi Java.
L'API SIGAR offre tutte le funzionalità che sto cercando in un pacchetto, quindi è la risposta migliore alla mia domanda finora. Tuttavia, poiché è concesso in licenza in base alla licenza GPL, non posso utilizzarlo per il mio scopo originale (un prodotto commerciale, a sorgente chiuso). È possibile che Hyperic possa concedere in licenza SIGAR per uso commerciale, ma non ci ho pensato. Per i miei progetti GPL, prenderò sicuramente in considerazione SIGAR in futuro.
Per le mie attuali esigenze, mi sto orientando verso quanto segue:
- Per l'utilizzo della CPU,
OperatingSystemMXBean.getSystemLoadAverage() / OperatingSystemMXBean.getAvailableProcessors()
(carico medio per CPU) - Per memoria,
OperatingSystemMXBean.getTotalPhysicalMemorySize()
eOperatingSystemMXBean.getFreePhysicalMemorySize()
- Per spazio su disco
File.getTotalSpace()
eFile.getUsableSpace()
limitazioni:
I getSystemLoadAverage()
metodi di query dello spazio su disco e sono disponibili solo in Java 6. Inoltre, alcune funzionalità JMX potrebbero non essere disponibili per tutte le piattaforme (ovvero è stato segnalato che getSystemLoadAverage()
restituisce -1 su Windows).
Sebbene originariamente concesso in licenza in GPL, è stato modificato in Apache 2.0 , che può essere generalmente utilizzato per prodotti commerciali chiusi.