Je souhaite surveiller les informations système suivantes en Java:
- Utilisation actuelle du processeur ** (pourcentage)
- Mémoire disponible * (libre / totale)
Espace disque disponible (libre / total)
* Notez que je veux dire la mémoire globale disponible pour l'ensemble du système, pas seulement la JVM.
Je recherche une solution multiplateforme (Linux, Mac et Windows) qui ne repose pas sur mon propre code appelant des programmes externes ou utilisant JNI. Bien que ce soient des options viables, je préférerais ne pas gérer moi-même le code spécifique au système d'exploitation si quelqu'un a déjà une meilleure solution.
S'il existe une bibliothèque gratuite qui le fait de manière fiable et multiplateforme, ce serait génial (même si elle effectue des appels externes ou utilise du code natif lui-même).
Les suggestions sont très appréciées.
Pour clarifier, je voudrais obtenir l'utilisation actuelle du processeur pour l'ensemble du système, pas seulement le ou les processus Java.
L'API SIGAR fournit toutes les fonctionnalités que je recherche dans un seul package, c'est donc la meilleure réponse à ma question à ce jour. Cependant, en raison de sa licence sous GPL, je ne peux pas l'utiliser pour mon objectif initial (une source fermée, un produit commercial). Il est possible qu'Hyperic accorde une licence à SIGAR à des fins commerciales, mais je ne l'ai pas examiné. Pour mes projets GPL, je considérerai certainement SIGAR à l'avenir.
Pour mes besoins actuels, je penche vers ce qui suit:
- Pour l'utilisation du processeur,
OperatingSystemMXBean.getSystemLoadAverage() / OperatingSystemMXBean.getAvailableProcessors()
(charge moyenne par processeur) - Pour mémoire,
OperatingSystemMXBean.getTotalPhysicalMemorySize()
etOperatingSystemMXBean.getFreePhysicalMemorySize()
- Pour l'espace disque,
File.getTotalSpace()
etFile.getUsableSpace()
Limites:
Les getSystemLoadAverage()
méthodes d'interrogation de l'espace disque et ne sont disponibles que sous Java 6. De plus, certaines fonctionnalités de JMX peuvent ne pas être disponibles sur toutes les plates-formes (c'est-à-dire qu'il a été signalé qu'elle getSystemLoadAverage()
renvoie -1 sous Windows).
Bien que sous licence GPL à l'origine, il a été remplacé par Apache 2.0 , qui peut généralement être utilisé pour des produits commerciaux à source fermée.