Existe-t-il un moyen d'obtenir les paramètres d'une JVM en cours d'exécution? Existe-t-il un outil en ligne de commande comme jstat qui prend en entrée le pid de la JVM et renvoie ses paramètres de départ? Je suis particulièrement intéressé par les valeurs -Xmx et -Xms qui ont été données lors du démarrage de la JVM. Merci.
Edit : Pour clarifier mes contraintes. La JVM que nous souhaitons vérifier fonctionne sur un serveur de production. C'est pourquoi, nous préférons la perturbation minimale. Nous sommes capables de surveiller la JVM à l'aide de jstat, et nous espérons donc qu'il existe une solution simple similaire pour accéder aux paramètres.
Edit : Nous avons également essayé d'obtenir les paramètres en utilisant jvisualvm. Mais pour se connecter à une jvm distante, nous devons exécuter jstatd et modifier les paramètres de sécurité de la JVM, ce que nous avons trouvé très perturbateur et risqué sur un serveur de production.
Réponses:
Vous pouvez utiliser des jps comme
imprime quelque chose comme
4050 com.intellij.idea.Main -Xms128m -Xmx512m -XX:MaxPermSize=250m -ea -Xbootclasspath/a:../lib/boot.jar -Djb.restart.code=88 4667 sun.tools.jps.Jps -lvm -Dapplication.home=/opt/java/jdk1.6.0_22 -Xms8m
la source
jps -lvm
peut être trompeuse. Vérifiez toujours avec jinfo ou un autre outil. Le problème peut être si "-XX" est passé comme l'argument de programme normal et ignoré par JVM. C'est le cas si vous utilisez à lajava -jar my.jar -Xmx3g
place dejava -Xmx3g -jar my.jar
J'ajoute cette nouvelle réponse car, selon la documentation JDK8 , jcmd est une approche suggérée maintenant.
Vous trouverez ci-dessous des commandes pour obtenir vos propriétés / indicateurs souhaités.
Nous avons besoin de pid, pour cela utilisez jcmd -l, comme ci-dessous
username@users-Air:~/javacode$ jcmd -l 11441 Test 6294 Test 29197 jdk.jcmd/sun.tools.jcmd.JCmd -l
Il est maintenant temps d'utiliser ces pids pour obtenir les propriétés / indicateurs que vous voulez
Commande: jcmd 11441 VM.system_properties
11441: #Tue Oct 17 12:44:50 IST 2017 gopherProxySet=false awt.toolkit=sun.lwawt.macosx.LWCToolkit file.encoding.pkg=sun.io java.specification.version=9 sun.cpu.isalist= sun.jnu.encoding=UTF-8 java.class.path=. java.vm.vendor=Oracle Corporation sun.arch.data.model=64 java.vendor.url=http\://java.oracle.com/ user.timezone=Asia/Kolkata java.vm.specification.version=9 os.name=Mac OS X sun.java.launcher=SUN_STANDARD user.country=US sun.boot.library.path=/Library/Java/JavaVirtualMachines/jdk-9.jdk/Contents/Home/lib sun.java.command=Test http.nonProxyHosts=local|*.local|169.254/16|*.169.254/16 jdk.debug=release sun.cpu.endian=little user.home=/Users/XXXX user.language=en java.specification.vendor=Oracle Corporation java.home=/Library/Java/JavaVirtualMachines/jdk-9.jdk/Contents/Home file.separator=/ java.vm.compressedOopsMode=Zero based line.separator=\n java.specification.name=Java Platform API Specification java.vm.specification.vendor=Oracle Corporation java.awt.graphicsenv=sun.awt.CGraphicsEnvironment sun.management.compiler=HotSpot 64-Bit Tiered Compilers ftp.nonProxyHosts=local|*.local|169.254/16|*.169.254/16 java.runtime.version=9+181 user.name=XXXX path.separator=\: os.version=10.12.6 java.runtime.name=Java(TM) SE Runtime Environment file.encoding=UTF-8 java.vm.name=Java HotSpot(TM) 64-Bit Server VM java.vendor.url.bug=http\://bugreport.java.com/bugreport/ java.io.tmpdir=/var/folders/dm/gd6lc90d0hg220lzw_m7krr00000gn/T/ java.version=9 user.dir=/Users/XXXX/javacode os.arch=x86_64 java.vm.specification.name=Java Virtual Machine Specification java.awt.printerjob=sun.lwawt.macosx.CPrinterJob sun.os.patch.level=unknown MyParam=2 java.library.path=/Users/XXXX/Library/Java/Extensions\:/Library/Java/Extensions\:/Network/Library/Java/Extensions\:/System/Library/Java/Extensions\:/usr/lib/java\:. java.vm.info=mixed mode java.vendor=Oracle Corporation java.vm.version=9+181 sun.io.unicode.encoding=UnicodeBig java.class.version=53.0 socksNonProxyHosts=local|*.local|169.254/16|*.169.254/16
Commande: jcmd 11441 VM.flags output:
11441: -XX:CICompilerCount=3 -XX:ConcGCThreads=1 -XX:G1ConcRefinementThreads=4 -XX:G1HeapRegionSize=1048576 -XX:InitialHeapSize=67108864 -XX:MarkStackSize=4194304 -XX:MaxHeapSize=1073741824 -XX:MaxNewSize=643825664 -XX:MinHeapDeltaBytes=1048576 -XX:NonNMethodCodeHeapSize=5830092 -XX:NonProfiledCodeHeapSize=122914074 -XX:ProfiledCodeHeapSize=122914074 -XX:ReservedCodeCacheSize=251658240 -XX:+SegmentedCodeCache -XX:-UseAOT -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseFastUnorderedTimeStamps -XX:+UseG1GC
Pour plus d'instructions sur les utilisations de jcmd, consultez mon article de blog
la source
Sous Linux:
java -XX:+PrintFlagsFinal -version | grep -iE 'HeapSize|PermSize|ThreadStackSize'
Sur Mac OSX:
java -XX:+PrintFlagsFinal -version | grep -iE 'heapsize|permsize|threadstacksize'
Sous Windows:
C:\>java -XX:+PrintFlagsFinal -version | findstr /i "HeapSize PermSize ThreadStackSize"
Source: https://www.mkyong.com/java/find-out-your-java-heap-memory-size/
la source
Vous pouvez également utiliser jinfo
la source
-flags
option n'existe pas dans OpenJDK 64 bits serveur VM (build-1.8.0_111-alpine-r0-b14 interne) (courant d'java:8u111-jdk-alpine
image Docker)flags
fonctionne avec l'image Java officielle de Docker basée sur Debian Jessiedocker run --rm -it java:8u111-jdk java -version && jinfo -h
Si vous pouvez le faire en java, essayez:
RuntimeMXBean
ManagementFactory
Exemple:
RuntimeMXBean runtimeMXBean = ManagementFactory.getRuntimeMXBean(); List<String> jvmArgs = runtimeMXBean.getInputArguments(); for (String arg : jvmArgs) { System.out.println(arg); }
la source
JConsole peut le faire. Vous pouvez également utiliser un puissant outil jvisualVM, qui est également inclus dans JDK depuis 1.6.0.8.
la source
Sous Linux, vous pouvez exécuter cette commande et voir le résultat:
ps aux | grep "java"
la source
Windows 10 ou Windows Server 2016 fournissent ces informations dans leur gestionnaire de tâches standard. Un cas rare pour la production, mais si la JVM cible s'exécute sous Windows, le moyen le plus simple de voir ses paramètres est d'appuyer sur Ctrl + Alt + Suppr, de choisir l' onglet Processus et d'ajouter la colonne Ligne de commande (en cliquant avec le bouton droit de la souris sur tout en-tête de colonne existant).
la source
Si vous souhaitez obtenir les paramètres JVM d'un processus java en cours d'exécution, faites simplement kill -3 java-pid. Vous obtiendrez un fichier de vidage de mémoire dans lequel vous pourrez trouver les paramètres jvm utilisés lors du lancement de l'application java.
la source
Vous pouvez utiliser la commande JConsole (ou tout autre client JMX) pour accéder à ces informations.
la source
Cette technique s'applique à toute application Java exécutée en local ou à distance.
jvisualvm peut être trouvé dans n'importe quel JDK depuis JDK 6 Update 7. Le didacticiel vidéo sur jvisualvm est ici.
la source
_JAVA_OPTIONS est une variable d'environnement qui peut être développée.
la source