Ich muss die CPU- und Speichernutzung für den Server in Java überprüfen. Weiß jemand, wie das gemacht werden kann?
java
operating-system
cpu
ram
Johnny Bou
quelle
quelle
Antworten:
Wenn Sie speziell nach Speicher in JVM suchen:
Diese sollten jedoch nur als Schätzung herangezogen werden ...
quelle
quelle
freeMemory
Hier wird die in JVM verfügbare Speichermenge zurückgegeben, die sehr unterschiedlich istWenn Sie die Sun JVM verwenden und an der internen Speichernutzung der Anwendung interessiert sind (wie viel des zugewiesenen Speichers Ihre App verwendet), schalte ich lieber die integrierte Garbage Collection-Protokollierung der JVMs ein. Sie fügen einfach -verbose: gc zum Startbefehl hinzu.
Aus der Sun-Dokumentation:
Weitere Informationen finden Sie unter: http://java.sun.com/docs/hotspot/gc5.0/gc_tuning_5.html
quelle
Von hier aus
quelle
operatingSystemMXBean.getProcessCpuLoad();
? Laut Oracle-Dokumentation gibt diese Methode "Gibt die" letzte CPU-Nutzung "für den Java Virtual Machine-Prozess zurück." Ich sehe jedoch einen relativ großen Unterschied zwischen Ihrer Methode und dieser Methode.OperatingSystemMXBean
Klassen. Eine davon ist die Schnittstelle injava.lang
. Es gibt aber auch eine andere Version, die diese erweitertcom.sun.management
. Das ist die Methode, auf die ich mich bezogOperatingSystemMXBean
JMX, Die bereitgestellten MXBeans (ThreadMXBean usw.) geben Ihnen Speicher- und CPU-Auslastung.
quelle
Für die Speichernutzung funktioniert Folgendes:
Für die CPU-Auslastung müssen Sie eine externe Anwendung verwenden, um sie zu messen.
quelle
Seit Java 1.5 enthält das JDK ein neues Tool: JConsole , das Ihnen die CPU- und Speicherauslastung einer JVM ab 1.5 anzeigt. Es kann Diagramme dieser Parameter erstellen, in CSV exportieren, die Anzahl der geladenen Klassen, die Anzahl der Instanzen, Deadlocks, Threads usw. anzeigen.
quelle
Wenn Sie die Runtime / TotalMemory-Lösung verwenden, die hier in vielen Antworten veröffentlicht wurde (das habe ich schon oft getan), müssen Sie zuerst zwei Garbage Collections erzwingen, wenn Sie ziemlich genaue / konsistente Ergebnisse erzielen möchten.
Aus Effizienzgründen lässt Java normalerweise zu, dass Müll den gesamten Speicher ausfüllt, bevor ein GC erzwungen wird, und selbst dann handelt es sich normalerweise nicht um einen vollständigen GC. Daher liegen Ihre Ergebnisse für runtime.freeMemory () immer irgendwo zwischen der "realen" Menge an freiem Speicher und 0 .
Der erste GC bekommt nicht alles, er bekommt das meiste davon.
Der Aufschwung ist, dass Sie, wenn Sie nur den Aufruf von freeMemory () ausführen, eine Nummer erhalten, die absolut nutzlos ist und stark variiert. Wenn Sie jedoch zuerst 2 gc ausführen, ist dies ein sehr zuverlässiges Messgerät. Es macht auch die Routine viel langsamer (Sekunden, möglicherweise).
quelle
Das Runtime- Objekt von Java kann die Speichernutzung der JVM melden. Für den CPU-Verbrauch müssen Sie ein externes Dienstprogramm wie Unix Top oder Windows Process Manager verwenden.
quelle
Hier ist ein einfacher Code zur Berechnung der aktuellen Speichernutzung in Megabyte:
quelle
Ich würde auch den folgenden Weg hinzufügen, um die CPU-Last zu verfolgen:
Sie können mehr lesen hier
quelle
JConsole ist eine einfache Möglichkeit, eine laufende Java-Anwendung zu überwachen, oder Sie können einen Profiler verwenden, um detailliertere Informationen zu Ihrer Anwendung zu erhalten. Ich benutze dafür gerne den NetBeans Profiler .
quelle
Der YourKit Java Profiler ist eine hervorragende kommerzielle Lösung. Weitere Informationen finden Sie in den Dokumenten zur CPU-Profilerstellung und Speicherprofilerstellung .
quelle
Wenn Sie Tomcat verwenden, lesen Sie Psi Probe , mit dem Sie den internen und externen Speicherverbrauch sowie eine Vielzahl anderer Bereiche überwachen können.
quelle
Für Eclipse können Sie TPTP (Test and Performance Tools Platform) verwenden, um die Speichernutzung usw. zu analysieren. Weitere Informationen
quelle