obtenez de l'OS au niveau du système d'information
Je suis actuellement à la construction d'une application Java qui pourrait être fonctionner sur plusieurs plates-formes, mais principalement des variantes de Solaris, Linux et Windows.
Quelqu'un a réussi à extraire des informations telles que l'espace disque utilisé, utilisation CPU et de la mémoire utilisée dans l'OS sous-jacent? Ce sujet vient de ce que le Java application elle-même est trop long?
De préférence j'aimerais obtenir cette information sans utiliser JNI.
- Avec respect pour libérer de la mémoire, voir stackoverflow.com/a/18366283/231397 (
Runtime.getRuntime().freeMemory()
comme suggéré dans l'acceptation réponse N'a PAS donné la quantité de mémoire libre.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez obtenir un peu de la mémoire limitée de l'information à partir de la classe Runtime. Ce n'est pas vraiment exactement ce que vous cherchez, mais j'ai pensé que je pourrais fournir par souci d'exhaustivité. Voici un petit exemple. Edit: Vous pouvez également obtenir de l'utilisation du disque de l'information à partir de la java.io.Fichier de classe. L'utilisation de l'espace disque trucs nécessite Java 1.6 ou supérieur.
La java.lang.gestion paquet ne vous donner beaucoup plus d'informations que l'Exécution, par exemple, il vous donnera la mémoire du tas (
ManagementFactory.getMemoryMXBean().getHeapMemoryUsage()
) distincte de la non-mémoire du tas (ManagementFactory.getMemoryMXBean().getNonHeapMemoryUsage()
).Vous pouvez également obtenir des processus d'utilisation de l'UC (sans écrire votre propre JNI code), mais vous avez besoin de jeter le
java.lang.management.OperatingSystemMXBean
à uncom.sun.management.OperatingSystemMXBean
. Cela fonctionne sur Windows et Linux, je n'ai pas testé ailleurs.Par exemple ... appeler l'obtenir getCpuUsage() la méthode de plus en plus fréquemment pour obtenir des lectures plus précises.
OperatingSystemMXBean
àcom.sun.management.OperatingSystemMXBean
et la préface de toutes les instances degetOperatingSystemMXBean()
avecManagementFactory.
. Vous avez besoin d'importer toutes les classes de façon appropriée.getCpuUsage
dire que le système est à l'aide de tous ses availableProcessors à 100%?((double)( processCpuTime - lastProcessCpuTime )) / ((double)( systemTime - lastSystemTime ))
Je pense que la meilleure méthode est de mettre en œuvre la SIGAR API par Hyperic. Il fonctionne pour la plupart des principaux systèmes d'exploitation ( sacrément près rien de moderne ) et il est très facile de travailler avec. Le développeur(s) sont très sensibles sur leur forum et les listes de diffusion. J'aime aussi que c'est
GPL2Sous licence Apache. Ils fournissent une tonne d'exemples en Java aussi!SIGAR == Système d'Information, la Collecte Et l'outil de Reporting.
Il y a un projet en Java qui utilise la JNA (donc pas de bibliothèques natives à installer) et est en développement actif. Il prend actuellement en charge de Linux, OSX, Windows, Solaris et FreeBSD et offre mémoire RAM, le PROCESSEUR, la Batterie et les informations du système de fichiers.
Vous pouvez obtenir des informations au niveau du système en utilisant
System.getenv()
, en passant de l'environnement nom de la variable comme paramètre. Par exemple, sur Windows:Pour d'autres systèmes d'exploitation, la présence/absence et les noms des variables d'environnement appropriées seront différents.
Pour windows je suis allé de cette façon.
Ici est la lien avec des détails.
Ajouter OSHI dépendance via maven:
Obtenir une batterie d'une capacité de gauche en pourcentage:
Avoir un regard sur les Api disponibles dans la java.lang.gestion paquet. Par exemple:
OperatingSystemMXBean.getSystemLoadAverage()
ThreadMXBean.getCurrentThreadCpuTime()
ThreadMXBean.getCurrentThreadUserTime()
Il y a des tas d'autres choses utiles là.
Généralement, pour obtenir un faible niveau de l'OS d'informations, vous pouvez appeler OS des commandes spécifiques qui vous donnent les informations que vous souhaitez avec de l'Exécution.exec() ou lire des fichiers comme /proc/* sous Linux.
Utilisation de l'UC n'est pas simple -- java.lang.gestion via com.soleil.de la gestion.OperatingSystemMXBean.getProcessCpuTime vient de fermer (voir Patrick excellent extrait de code ci-dessus), mais notez qu'il ne donne accès à la fois le CPU passé dans votre processus. il ne sera pas vous dire à propos du PROCESSEUR le temps passé dans d'autres processus, ou même le PROCESSEUR, le temps passé à faire des activités système, liés à votre processus.
par exemple, j'ai un réseau à forte intensité de processus java -- c'est la seule chose en cours d'exécution et le CPU est à 99%, mais seulement 55% des qui est signalée comme "processeur CPU".
ne même pas me faire sur "load average" comme c'est à peu près inutile, en dépit d'être le seul cpu article lié sur la MX bean. si seulement le soleil dans leur occasionnels sagesse exposés quelque chose comme "getTotalCpuTime"...
grave pour le contrôle CPU SIGAR mentionné par Matt semble être le meilleur pari.
Il est encore en développement, mais vous pouvez déjà utiliser jHardware
C'est une simple bibliothèque restes de données du système à l'aide de Java. Il fonctionne à la fois sous Linux et Windows.
Si vous utilisez Jrockit VM puis ici, c'est une autre façon d'obtenir des VM d'utilisation du PROCESSEUR. Exécution de haricots peuvent également vous donner la charge de l'UC par processeur. J'ai utilisé ce que sur Red Hat Linux à l'observateur de Tomcat performance. Vous devez activer JMX de la télécommande catalina.sh pour que cela fonctionne.
Sur
Windows
, vous pouvez exécuter lesysteminfo
de commande et récupère sa sortie pour l'exemple avec le code suivant:La manière la plus simple qui peut être utilisé pour obtenir le niveau de l'OS, de l'information et je l'ai testé dans mon Mac qui fonctionne bien :
Vous pouvez trouver de nombreux paramètres pertinents du système d'exploitation ici
Hey, vous pouvez le faire avec java/com d'intégration. En accédant à WMI fonctionnalités que vous pouvez obtenir toutes les informations.