2009-08-21 8 views
11

Le point d'accès Java vpm peut être exécuté avec l'argument -client ou -server. Si aucun n'est spécifié alors il en choisit un selon certaines règles.comment savoir si VM est en cours d'exécution en mode serveur ou client?

Est-il possible de dire si une machine virtuelle en cours d'exécution est en cours d'exécution en mode client ou serveur lorsque le mode n'est pas spécifié sur la ligne de commande? J'ai besoin de cela sur une boîte de Windows en dehors du processus en cours.

Je réalise que ce n'est pas une question de programmation, mais j'espère que c'est ok parce que c'est lié à la programmation. Merci d'avance.

+1

Ajout de la possibilité de jinfo – VonC

+0

@Hemal d'où mon utilisation de 'jinfo', strictement limitée à l'option' -flag': ça marche – VonC

Répondre

4

En Java, vous pouvez vérifier cela avec ce code:

String s = System.getProperty("java.vm.name"); 
// s = Java HotSpot(TM) Server VM 

Mais ce sera très spécifique au vendeur.

A partir de la ligne de commande, vous pouvez utiliser jinfo (utilisé pour check a value of a given HotSpot VM option)

C:\>"c:\Program Files\Java\jdk1.6.0_16\bin\jps.exe" -l -m 
21812 sun.tools.jps.Jps -l -m 
19244 (eclipse) 

C:\>"c:\Program Files\Java\jdk1.6.0_16\bin\jinfo.exe" -flag NewRatio 19244 
-XX:NewRatio=12 

depuis:

  • il est rare de mettre réellement le NewRatio Hotpot option et
  • la documentation précise: Ratio des nouvelles/anciennes tailles de génération. [x86 -server: 8; x86 -client: 12]

12 signifie "Client".

+0

J'ai besoin de ça sur la ligne de commande, mais malheureusement, jinfo ne supporte pas ça sur Windows, C'est là que j'en ai besoin. –

+1

La chaîne de retour est spécifique au fournisseur, mais l'ensemble de la question Client vs Serveur VM est également spécifique au fournisseur. – beetstra

+0

@Hemal: si vous pouvez copier un JDK6, vous pouvez appeler jinfo sur Windows – VonC

5

Connectez-vous au processus Java en cours d'exécution avec jvisualvm. Cela vous permettra de voir les arguments JVM qui ont été utilisés.

0

Si la machine virtuelle Java est démarré avec debug, vous pouvez vous connecter à l'aide JDB et utiliser eval ...

eval System.getProperty("java.vm.name"); 

que ou jinfo

2

Vous pouvez récupérer ces informations à la connexion MBean serveur. Si vous exécutez une VM Sun, vous avez un MBean avec le nom "java.lang: type = Runtime" qui expose l'attribut "VmName", dont la valeur est la même que la propriété système "java.vm.name". Par exemple, pour un serveur vm, la valeur sera quelque chose comme "Java HotSpot (TM) Server VM". Les VM d'autres fournisseurs peuvent utiliser un mécanisme similaire.

Vous pouvez vous connecter au serveur MBean en utilisant les outils inclus dans le JDK, comme jconsole ou jvisualvm, ou en écrivant votre propre outil en utilisant JMX si vous avez besoin d'un accès par programmation.

Questions connexes