Comment puis-je surveiller l'ordinateur du PROCESSEUR, de la mémoire, et l'utilisation du disque en Java?
Je tiens à surveiller un système d'information en Java:
- Utilisation actuelle du PROCESSEUR** (en%)
- La mémoire disponible* (libre/total)
-
D'espace disque disponible (libre/total)
*Notez que je veux dire la quantité totale de mémoire disponible pour l'ensemble du système, non seulement la JVM.
Je suis à la recherche d'une solution multi-plateforme (Linux, Mac et Windows) qui ne repose pas sur mon propre code d'appel de programmes externes ou de l'utilisation de JNI. Bien que ces sont des options viables, je préfère ne pas maintenir des OS du code spécifique de moi si quelqu'un a déjà une meilleure solution.
Si il y a un accès gratuit à la bibliothèque qui ne ce dans la plus fiable, la croix-plate-forme de manière, ce serait génial (même si il fait des appels externes ou de l'utilisation de code natif lui-même).
Toutes les suggestions sont appréciés.
Pour clarifier, je voudrais obtenir de l'utilisation actuelle du PROCESSEUR pour l'ensemble du système, pas seulement le processus Java(es).
Le SIGAR API fournit toutes les fonctionnalités que je cherche dans un paquet, de sorte que c'est la meilleure réponse à ma question pour le moment. Toutefois, en raison étant sous licence GPL, je ne peux pas l'utiliser pour mon but, à l'origine (un fermé source, produit commercial). Il est possible que Hyperic peut licence SIGAR pour un usage commercial, mais je n'ai pas regardé en elle. Pour mon GPL projets, je vais certainement considérer SIGAR dans l'avenir.
Pour mes besoins, je me suis penchée vers la suivante:
- Pour l'utilisation du CPU,
OperatingSystemMXBean.getSystemLoadAverage() /OperatingSystemMXBean.getAvailableProcessors()
(charge moyenne par uc) - Pour mémoire,
OperatingSystemMXBean.getTotalPhysicalMemorySize()
etOperatingSystemMXBean.getFreePhysicalMemorySize()
- Pour l'espace disque,
File.getTotalSpace()
etFile.getUsableSpace()
Limitations:
La getSystemLoadAverage()
espace disque et de l'interrogation de méthodes sont disponibles uniquement sur la version 6 de Java. Aussi, certains JMX fonctionnalités peuvent ne pas être disponibles pour toutes les plates-formes (c'est à dire qu'il a été signalé que getSystemLoadAverage()
retourne -1 sur Windows).
Bien qu'à l'origine sous licence GPL, il a été changé à Apache 2.0, qui peuvent généralement être utilisés pour le code source fermé, des produits commerciaux.
- Pour clarifier, le sigar api vous permet de vous des infos sur le système. Si vous voulez jvm info sur JMX.
- SIGAR être sous GPL ne vous empêche pas de l'utiliser, cela signifie simplement que vous avez à communiquer avec les auteurs et de demander d'autres licences. Les auteurs sont souvent heureux d'accepter une somme modique et permettent de licences commerciales.
- Depuis la version 1.6.4 SIGAR est à l'aide de la licence Apache.
- savez-vous comment obtenir la charge pour chaque processeur?
Vous devez vous connecter pour publier un commentaire.
Le long des lignes de ce que j'ai mentionné dans ce post. Je vous recommande d'utiliser le SIGAR API. J'utilise le SIGAR API dans un de mes propres applications, et c'est formidable. Vous verrez qu'il est stable, bien pris en charge, et plein d'exemples utiles. Il est open-source avec un
GPL 2licence Apache 2.0. Check it out. J'ai le sentiment que ça va répondre à vos besoins.À l'aide de Java et le Sigar API, vous pouvez obtenir la Mémoire, le PROCESSEUR, le Disque, la Charge Moyenne d'Interface Réseau info et de mesures, de traiter des informations de la Table, Route d'informations, etc.
Suivantes soi-disant, vous reçoit de CPU et de RAM. Voir ManagementFactory pour plus de détails.
Dans le JDK 1.7, vous pouvez obtenir de l'UC du système et l'utilisation de la mémoire via
com.soleil.de la gestion.OperatingSystemMXBean
. Ceci est différent de celuijava.lang.management.OperatingSystemMXBean
.Cela fonctionne parfaitement pour moi, sans aucune API externe, juste en Java natif fonctionnalité cachée 🙂
Jetez un oeil à cette très détaillée de l'article:
http://nadeausoftware.com/articles/2008/03/java_tip_how_get_cpu_and_user_time_benchmarking#UsingaSuninternalclasstogetJVMCPUtime
Pour obtenir le pourcentage de CPU utilisé, tous vous avez besoin est un peu de mathématiques simples:
Remarque: Vous devez importer
com.sun.management.OperatingSystemMXBean
et pasjava.lang.management.OperatingSystemMXBean
.Pour l'espace disque, si vous avez la version 6 de Java, vous pouvez utiliser le getTotalSpace et getFreeSpace méthodes sur Fichier. Si vous n'êtes pas sur la version 6 de Java, je crois que vous pouvez utiliser Apache Commons IO obtenir de la manière.
Je ne sais pas du tout de la croix-plate-forme de manière à obtenir l'utilisation de l'UC ou de la Mémoire, j'ai peur.
Beaucoup de ce qui est déjà disponible via JMX. Avec Java 5, JMX est intégré et qu'ils comprennent une console JMX spectateur avec le JDK.
Vous pouvez utiliser JMX pour surveiller manuellement, ou invoquer JMX commandes à partir de Java si vous avez besoin de ces informations dans votre propre moment de l'exécution.
Le code suivant est Linux (Unix peut-être), mais il travaille à un projet réel.
Faire un fichier batch "Pc.chauve-souris", comme,
typeperf -sc 1 "\mukit\processeur(_Total)\%% Temps Processeur"
Vous pouvez utiliser la classe MProcess,
}
Puis après un peu de manipulation de chaîne, vous obtenez l'utilisation de l'UC. Vous pouvez utiliser le même processus pour d'autres tâches.
--Mukit Hasan
typeperf "\processor(_total)\% processor time"
Si vous le mettez en lot de fichiers, utiliser %% au lieu de %. J'ai utilisé technet.microsoft.com/en-us/library/bb490960.aspx.La accepté de répondre en 2008 recommandé SIGAR. Cependant, comme un commentaire à partir de 2014 (@Alvaro) dit:
Ma recommandation est d'utiliser https://github.com/oshi/oshi
Ou la réponse mentionné ci-dessus.