Überwachung der Datenträgerverwendung und anderer Metriken in Java

Überwachen der Datenträgernutzung und anderer Metriken in Java

1. Überblick

In diesem kurzen Tutorial wird erläutert, wie Sie wichtige Metriken in Java überwachen. Wir konzentrieren uns aufdisk space, memory usage, and thread data – using only core Java APIs.

In unserem ersten Beispiel verwenden wir die KlasseFile, um bestimmte Festplatteninformationen abzufragen.

Anschließend analysieren wir die Speichernutzung und Prozessorinformationen, indem wir in die KlasseManagementFactoryeintauchen.

Schließlich werden wirhow to monitor these key metrics at runtime using Java Profilers ansprechen.

2. Einführung in die KlasseFile

Einfach ausgedrückt, dasFile class represents an abstraction of a file oder Verzeichnis. Es kann zuobtain key information about the file system and maintainOS independence in Bezug auf Dateipfade verwendet werden. In diesem Lernprogramm verwenden wir diese Klasse, um Root-Partitionen auf Windows- und Linux-Computern zu untersuchen.

3. ManagementFactory

Java provides the ManagementFactory class as a factory for getting managed beans (MXBeans)containingspecific information about the JVM. In den folgenden Codebeispielen werden zwei davon untersucht:

3.1. MemoryMXBean

DieMemoryMXBean represents the management interface für das Speichersystem der JVM. Zur Laufzeit erstellt die JVM eine einzelne Instanz dieser Schnittstelle, die wir mit dergetMemoryMXBean()-Methode vonManagementFactoryabrufen können.

3.2. ThreadMXBean

Ähnlich wieMemoryMXBean istThreadMXBean die Verwaltungsschnittstelle für das Thread-System der JVM. Es kann mit der MethodegetThreadMXBean()aufgerufen werden und enthält wichtige Daten zu Threads.

In den folgenden Beispielen verwenden wir dieThreadMXBean, um dieThreadInfo class – which contains specific information regarding threads running on the JVM. der JVM in die Hände zu bekommen

3. Überwachen der Festplattennutzung

In diesem Codebeispiel verwenden wir die File-Klasse, um wichtige Informationen zu Partitionen zu enthalten. Das folgende Beispiel gibt den freien, gesamten und verfügbaren Speicherplatz vom Laufwerk C: auf einem Windows-Computer zurück:

File cDrive = new File("C:");
System.out.println(String.format("Total space: %.2f GB",
  (double)cDrive.getTotalSpace() /1073741824));
System.out.println(String.format("Free space: %.2f GB",
  (double)cDrive.getFreeSpace() /1073741824));
System.out.println(String.format("Usable space: %.2f GB",
  (double)cDrive.getUsableSpace() /1073741824));

Ebenso können wir die gleichen Informationen fürroot directory of a Linux machine zurückgeben:

File root = new File("/");
System.out.println(String.format("Total space: %.2f GB",
  (double)root.getTotalSpace() /1073741824));
System.out.println(String.format("Free space: %.2f GB",
  (double)root.getFreeSpace() /1073741824));
System.out.println(String.format("Usable space: %.2f GB",
  (double)root.getUsableSpace() /1073741824));

Der obige Code gibt den gesamten, freien und nutzbaren Speicherplatz für die definierte Datei aus. Standardmäßig geben die oben genannten Methoden die Anzahl der Bytes an. Wir haben diese Bytes in Gigabyte konvertiert, um das Ergebnis für den Menschen besser lesbar zu machen.

4. Überwachen der Speichernutzung

Wir werden jetzt ManagementFactory class toquery the memory available to the JVM by calling the MemoryMXBean verwenden.

In diesem Beispiel konzentrieren wir uns hauptsächlich auf die Abfrage des Heapspeichers. Es ist wichtig zu beachten, dass Nicht-Heap-Speicher auch mitMemoryMXBean: abgefragt werden kann

MemoryMXBean memoryMXBean = ManagementFactory.getMemoryMXBean();
System.out.println(String.format("Initial memory: %.2f GB",
  (double)memoryMXBean.getHeapMemoryUsage().getInit() /1073741824));
System.out.println(String.format("Used heap memory: %.2f GB",
  (double)memoryMXBean.getHeapMemoryUsage().getUsed() /1073741824));
System.out.println(String.format("Max heap memory: %.2f GB",
  (double)memoryMXBean.getHeapMemoryUsage().getMax() /1073741824));
System.out.println(String.format("Committed memory: %.2f GB",
  (double)memoryMXBean.getHeapMemoryUsage().getCommitted() /1073741824));

Das obige Beispiel gibt den anfänglichen, benutzten, maximalen bzw. festgeschriebenen Speicher zurück. Hier ist eine kurze Erklärung dessen, was diesemeansind:

  • Initial: Anfangsspeicher, den die JVM beim Start vom Betriebssystem anfordert

  • Verwendet: Die aktuelle Speichermenge, die von der JVM verwendet wird

  • Max: Der maximale Speicher, der der JVM zur Verfügung steht. Wenn diese Grenze erreicht ist, wird einOutOfMemoryException may geworfen

  • Festgeschrieben: Die Menge an Speicher, die der JVM garantiert zur Verfügung steht

5. CPU auslastung

Als Nächstes verwenden wir die ObjekteThreadMXBean to gain a comprehensive list of ThreadInfo undquery them to gainuseful information regarding thecurrent threads, die auf der JVM ausgeführt werden.

ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean();

for(Long threadID : threadMXBean.getAllThreadIds()) {
    ThreadInfo info = threadMXBean.getThreadInfo(threadID);
    System.out.println("Thread name: " + info.getThreadName());
    System.out.println("Thread State: " + info.getThreadState());
    System.out.println(String.format("CPU time: %s ns",
      threadMXBean.getThreadCpuTime(threadID)));
  }

Zunächst erhält der Code mithilfe der sm-MethodegetAllThreadIds eine Liste der aktuellen Threads. Für jeden Thread wird dann der Name und der Status des Threads gefolgt von der CPU-Zeit für den Thread in Nanosekunden ausgegeben.

6. Überwachen von Metriken mithilfe von Profilern

Abschließend ist zu erwähnen, dasswe can monitor these key metrics without using any Java code. Java Profiler überwachen wichtige Konstruktionen und Operationen auf JVM-Ebene genau und bieten Echtzeitanalysen von Speicher, Threads und mehr.

VisualVM ist ein solches Beispiel für einen Java-Profiler und wird seit Java 6 mit dem JDK gebündelt.  Viele integrierte Entwicklungsumgebungen (IDE) enthalten Plugins, mit denen Profiler bei der Entwicklung neuen Codes genutzt werden können. Sie können mehr über Java Profiler und VisualVMhereerfahren.

7. Fazit

In diesem Artikel haben wir uns mit der Verwendung von Java-Kern-APIs zum Abfragen von Schlüsselinformationen zur Festplattennutzung, Speicherverwaltung und Thread-Informationen befasst.

Wir haben uns mehrere Beispiele für die Verwendung derFile andManagmentFactory -Skalen angesehen, um diese Metriken zu erhalten.