192 votes

Comment surveiller l’ordinateur ' s cpu, la mémoire et l’utilisation du disque en Java ?

Je tiens à surveiller un système d'information en Java:

  • utilisation actuelle du processeur** (%)
  • 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, 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.

**EDIT: Pour préciser, j'aimerais obtenir de l'utilisation actuelle du PROCESSEUR pour l'ensemble du système, pas seulement le processus Java(es).

EDIT: 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é. 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() et OperatingSystemMXBean.getFreePhysicalMemorySize()
  • pour l'espace disque, Fichier.getTotalSpace() et File.getUsableSpace()

Limitations:

Le getSystemLoadAverage() et l'espace disque de l'interrogation méthodes ne sont disponibles que sous Java 6. 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).

EDIT 2011-08-18: Bien qu'à l'origine sous licence GPL, il a été changé pour Apache 2.0, qui peuvent généralement être utilisés pour le code source fermé, des produits commerciaux.

67voto

Matt Cummings Points 1288

Le long des lignes de ce que j'ai mentionné dans ce post; je vous recommande d'utiliser le SIGAR API ( je ne suis pas associé avec lui/eux de toute façon - mais, j'utilise le SIGAR API dans un de mes propres applications et il est grand). Vous verrez qu'il est stable, bien pris en charge, et plein d'exemples utiles. Il est open-source avec une licence GPL2 (il a maintenant une licence 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.

SIGAR API par Hyperic

56voto

Eugene Yokota Points 43213

Ce que j’ai trouvé par Google. Cela vous obtient censément CPU et RAM. Voir ManagementFactory pour plus de détails.

42voto

Gp2you Points 91

JDK 1.7, vous pouvez obtenir utilisation cpu du système et utilisation de la mémoire par l’intermédiaire``

16voto

ludovicc Points 334

Jetez un oeil sur cet article très détaillé : http://nadeausoftware.com/articles/2008/03/java_tip_how_get_cpu_and_user_time_benchmarking#UsingaSuninternalclasstogetJVMCPUtime

Pour obtenir le pourcentage de CPU utilisé, tout ce dont vous avez besoin c’est quelques fonctions mathématiques simples :

8voto

Matt Sheppard Points 32256

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X