Wie kann ich den computer überwachen die CPU, Speicher und Festplattennutzung in Java?
Ich würde gerne überwachen Sie die folgenden system-Informationen in Java:
- Aktuelle CPU-Nutzung** (Prozent)
- Freier Speicher* (frei/Gesamt)
-
Verfügbarer Festplattenspeicher (frei/Gesamt)
*Beachten Sie, dass ich meine gesamte Speicher verfügbar, um das ganze system, nicht nur für die JVM.
Ich bin auf der Suche nach einem cross-Plattform-Lösung (Linux, Mac und Windows) , der sich nicht auf meinem eigenen code aufrufen von externen Programmen oder mittels JNI. Obwohl diese sind praktikable Möglichkeiten, ich würde es vorziehen, nicht zu pflegen OS-spezifischen code mich, ob das schon jemand hat eine bessere Lösung.
Wenn es eine freie Bibliothek gibt, das dies tut, zuverlässig, plattformübergreifend, das wäre toll (auch wenn es externe Anrufe oder verwendet native code selbst).
Alle Vorschläge werden sehr geschätzt.
Klarzustellen, ich möchte die aktuelle CPU-Auslastung für das gesamte system, nicht nur der Java-Prozess(es).
Die SIGAR API bietet alle Funktionen, die ich Suche in einem Paket, so ist es die beste Antwort auf meine Frage bisher. Aber, aufgrund dass es unter der GPL lizensiert ist, kann ich nicht verwenden es für meinen ursprünglichen Zweck (eine closed-source -, kommerziellen Produkt). Es ist möglich, dass Hyperic können Lizenz SIGAR für die kommerzielle Nutzung, aber ich habe nicht hingeschaut. Für meinen GPL-Projekte, ich werde auf jeden Fall überlegen SIGAR in die Zukunft.
Strom für meine Bedürfnisse, ich bin Neigung zu den folgenden:
- Für CPU-Nutzung, die
OperatingSystemMXBean.getSystemLoadAverage() /OperatingSystemMXBean.getAvailableProcessors()
(Durchschnittliche Auslastung pro cpu) - Für Speicher
OperatingSystemMXBean.getTotalPhysicalMemorySize()
undOperatingSystemMXBean.getFreePhysicalMemorySize()
- Für Speicherplatz
File.getTotalSpace()
undFile.getUsableSpace()
Einschränkungen:
Den getSystemLoadAverage()
und Speicherplatz Abfragen-Methoden sind nur unter Java 6. Auch einige JMX-Funktionen möglicherweise nicht verfügbar auf allen Plattformen (D. H. es ist berichtet worden, dass getSystemLoadAverage()
gibt -1 zurück, auf Windows).
Obwohl ursprünglich unter der GPL lizenziert, es geändert wurde zu Apache 2.0die in der Regel für closed-source, kommerziellen Produkten.
InformationsquelleAutor der Frage David Crow | 2008-09-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Entlang der Linien von dem, was ich erwähnt in diesem Beitrag. Ich empfehle, verwenden Sie die SIGAR API. Ich benutze die SIGAR API in einem eigenen Applikationen und er ist groß. Sie finden, dass es stabil ist, gut unterstützt, und voller nützlicher Beispiele. Es ist open-source mit einem
GPL 2Apache-2.0-Lizenz. Überprüfen Sie es heraus. Ich habe das Gefühl, es wird Ihre Bedürfnisse zu erfüllen.Verwendung von Java und die Sigar API, die Sie bekommen können, Speicher, CPU, Festplatte, Load-Average, - Netz-Schnittstelle info und Metriken, Prozess-Tabelle Informationen, Routen-info, etc.
InformationsquelleAutor der Antwort Matt Cummings
Folgende angeblich bekommt man CPU und RAM. Sehen ManagementFactory für mehr details.
InformationsquelleAutor der Antwort Eugene Yokota
In JDK 1.7, können Sie system-CPU und Speicher-Auslastung über
com.Sonne.management.OperatingSystemMXBean
. Dies ist anders alsjava.lang.management.OperatingSystemMXBean
.InformationsquelleAutor der Antwort Gp2you
Haben Sie einen Blick auf diese sehr detaillierte Artikel:
http://nadeausoftware.com/articles/2008/03/java_tip_how_get_cpu_and_user_time_benchmarking#UsingaSuninternalclasstogetJVMCPUtime
Um den Prozentsatz der CPU verwendet, alles, was Sie brauchen, ist eine einfache Mathematik:
Hinweis: Sie müssen den import
com.sun.management.OperatingSystemMXBean
und nichtjava.lang.management.OperatingSystemMXBean
.InformationsquelleAutor der Antwort ludovicc
Diese funktioniert bei mir tadellos ohne externe API, nur native Java-hidden feature 🙂
InformationsquelleAutor der Antwort bizzr3
Für Speicherplatz, wenn Sie Java 6 verwenden, können Sie die getTotalSpace und getFreeSpace Methoden auf die Datei. Wenn Sie nicht auf Java 6, ich glaube, Sie verwenden können,Apache Commons IOum etwas von dem Weg dorthin.
Ich kenne kein cross-Plattform-Weg, um die CPU-Auslastung oder Speicherauslastung, fürchte ich.
InformationsquelleAutor der Antwort Matt Sheppard
Viele dies ist schon über JMX. Mit Java 5 ist JMX ist eingebaut und Sie verfügen über ein JMX-console-viewer mit dem JDK.
Können Sie die JMX-überwachung manuell, oder rufen Sie die JMX-Kommandos von Java, wenn diese Informationen benötigen Sie in Ihrem eigenen Lauf-Zeit.
InformationsquelleAutor der Antwort Jason Cohen
InformationsquelleAutor der Antwort pragati
Machen Sie eine batch-Datei "Pc.Fledermaus",
typeperf -sc 1 "\mukit\Prozessor(_Total)\% Prozessorzeit (%)"
Können Sie die Klasse MProcess,
}
Dann nach einigen string-manipulation, bekommen Sie die CPU-Nutzung. Können Sie verwenden Sie den gleichen Vorgang für die anderen Aufgaben.
--Mukit Hasan
InformationsquelleAutor der Antwort Md. Mukit Hasan
Dem folgenden code wird Linux (vielleicht auch Unix), aber es funktioniert in einem realen Projekt.
InformationsquelleAutor der Antwort