Ich möchte die folgenden Systeminformationen in Java überwachen:
- Aktuelle CPU-Auslastung ** (Prozent)
- Verfügbarer Speicher * (frei / insgesamt)
Verfügbarer Speicherplatz (frei / insgesamt)
* Beachten Sie, dass ich den Gesamtspeicher meine, der dem gesamten System zur Verfügung steht, nicht nur der JVM.
Ich suche nach einer plattformübergreifenden Lösung (Linux, Mac und Windows), die nicht auf meinem eigenen Code basiert, der externe Programme aufruft oder JNI verwendet. Obwohl dies praktikable Optionen sind, würde ich es vorziehen, den betriebssystemspezifischen Code nicht selbst zu pflegen, wenn jemand bereits eine bessere Lösung hat.
Wenn es eine kostenlose Bibliothek gibt, die dies zuverlässig und plattformübergreifend tut, wäre das großartig (selbst wenn sie externe Anrufe tätigt oder nativen Code selbst verwendet).
Anregungen werden sehr geschätzt.
Zur Verdeutlichung möchte ich die aktuelle CPU-Auslastung für das gesamte System ermitteln, nicht nur für die Java-Prozesse.
Die SIGAR-API bietet alle Funktionen, die ich suche, in einem Paket, sodass sie die bisher beste Antwort auf meine Frage ist. Da es jedoch unter der GPL lizenziert ist, kann ich es nicht für meinen ursprünglichen Zweck verwenden (ein geschlossenes, kommerzielles Produkt). Es ist möglich, dass Hyperic SIGAR für die kommerzielle Nutzung lizenziert, aber ich habe es nicht untersucht. Für meine GPL-Projekte werde ich in Zukunft definitiv SIGAR in Betracht ziehen.
Für meine aktuellen Bedürfnisse neige ich zu Folgendem:
- Für die CPU-Auslastung
OperatingSystemMXBean.getSystemLoadAverage() / OperatingSystemMXBean.getAvailableProcessors()
(Lastdurchschnitt pro CPU) - Für die Erinnerung
OperatingSystemMXBean.getTotalPhysicalMemorySize()
undOperatingSystemMXBean.getFreePhysicalMemorySize()
- Für Speicherplatz
File.getTotalSpace()
undFile.getUsableSpace()
Einschränkungen:
Die getSystemLoadAverage()
Abfragemethoden und Speicherplatz sind nur unter Java 6 verfügbar. Außerdem sind einige JMX-Funktionen möglicherweise nicht für alle Plattformen verfügbar (dh es wurde berichtet, dass dies der Fall istgetSystemLoadAverage()
unter Windows -1 zurückgegeben wird).
Obwohl ursprünglich unter GPL lizenziert, wurde es in Apache 2.0 geändert , das im Allgemeinen für kommerzielle Closed-Source-Produkte verwendet werden kann.