Surveillance de l’utilisation du disque et d’autres métriques en Java

Contrôle de l'utilisation du disque et d'autres métriques en Java

1. Vue d'ensemble

Dans ce rapide didacticiel, nous allons expliquer comment surveiller les métriques clés en Java. Nous allons nous concentrer surdisk space, memory usage, and thread data – using only core Java APIs.

Dans notre premier exemple, nous utiliserons la classeFile pour interroger des informations spécifiques sur le disque.

Ensuite, nous analyserons l'utilisation de la mémoire et les informations du processeur en plongeant dans la classeManagementFactory.

Enfin, nous aborderonshow to monitor these key metrics at runtime using Java Profilers.

2. Introduction à la classeFile

En termes simples, lesFile class represents an abstraction of a file ou le répertoire. Il peut être utilisé pourobtain key information about the file system and maintainOS independence concernant les chemins de fichiers. Dans ce didacticiel, nous utiliserons cette classe pour examiner les partitions racine sur les machines Windows et Linux.

3. ManagementFactory

Java provides the ManagementFactory class as a factory for getting managed beans (MXBeans)containingspecific information about the JVM. Nous en examinerons deux dans les exemples de code suivants:

3.1. MemoryMXBean

LesMemoryMXBean represents the management interface pour le système de mémoire de la JVM. Lors de l'exécution, la JVM crée une seule instance de cette interface que nous pouvons récupérer à l'aide de la méthodeManagementFactory´sgetMemoryMXBean().

3.2. ThreadMXBean

De même queMemoryMXBean,ThreadMXBean est l'interface de gestion du système de threads de la JVM. Il peut être appelé en utilisant la méthodegetThreadMXBean() et contient des données clés concernant les threads.

Dans les exemples suivants, nous utiliserons lesThreadMXBean pour mettre la main sur lesThreadInfo class – which contains specific information regarding threads running on the JVM. de la JVM

3. Contrôle de l'utilisation du disque

Dans cet exemple de code, nous utiliserons la classe File pour contenir des informations clés sur les partitions. L'exemple suivant renvoie l'espace libre, total et disponible du lecteur C: sur un ordinateur Windows:

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));

De même, nous pouvons renvoyer les mêmes informations pour lesroot directory of a Linux machine:

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));

Le code ci-dessus imprime l'espace total, libre et utilisable pour le fichier défini. Par défaut, les méthodes ci-dessus fournissent le nombre d'octets. Nous avons converti ces octets en gigaoctets pour rendre le résultat beaucoup plus lisible par l'homme.

4. Contrôle de l'utilisation de la mémoire

Nous allons maintenant utiliser les ManagementFactory class toquery the memory available to the JVM by calling the MemoryMXBean.

Dans cet exemple, nous nous concentrerons principalement sur l'interrogation de la mémoire du tas. Il est important de noter que la mémoire non-tas peut également être interrogée en utilisantMemoryMXBean:

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));

L'exemple ci-dessus renvoie respectivement la mémoire initiale, utilisée, maximale et engagée. Voici une brève explication de ce que cesmeans:

  • Initial: la mémoire initiale que la machine virtuelle Java demande au système d'exploitation au démarrage

  • Used: quantité actuelle de mémoire utilisée par la machine virtuelle Java

  • Max: La mémoire maximale disponible pour la machine virtuelle Java. Si cette limite est atteinte, un messageOutOfMemoryException peut être lancé

  • Committed: quantité de mémoire garantie pour la machine virtuelle Java

5. L'utilisation du processeur

Ensuite, nous utiliserons les objetsThreadMXBean to gain a comprehensive list of ThreadInfo etquery them to gainuseful information regarding thecurrent threads exécutés sur la JVM.

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)));
  }

Premièrement, le code obtient une liste des threads actuels en utilisant la méthodegetAllThreadIds . Pour chaque thread, il génère ensuite le nom et l'état du thread, suivis du temps CPU pour le thread en nanosecondes.

6. Surveillance des métriques à l'aide des profileurs

Enfin, il convient de mentionner quewe can monitor these key metrics without using any Java code. Les profileurs Java surveillent de près les constructions et les opérations clés au niveau de la machine virtuelle Java et offrent une analyse en temps réel de la mémoire, des threads, etc.

VisualVM est l'un de ces exemples de profileur Java et est fourni avec le JDK depuis Java 6.   De nombreux environnements de développement intégrés (IDE) contiennent des plugins pour exploiter les profileurs tout en développant un nouveau code. Vous pouvez en savoir plus sur les profileurs Java et VisualVMhere.

7. Conclusion

Dans cet article, nous avons abordé l'utilisation des API Java principales pour interroger des informations clés sur l'utilisation du disque, la gestion de la mémoire et les informations sur les threads.

Nous avons examiné plusieurs exemples d'utilisation des classesFile andManagmentFactory pour obtenir ces métriques.