jinfo 是 JDK 自带的命令,可以用来查看正在运行的 java 应用程序的扩展参数,包括Java System属性和JVM命令行参数;也可以动态的修改正在运行的 JVM 一些参数。当系统崩溃时,jinfo可以从core文件里面知道崩溃的Java应用程序的配置信息。
jps -v口令只能查看到显示指定的参数,如果想要查看未被显示指定的参数的值就要使用jinfo口令
JAVA配置信息工具jinfo
命令格式
jinfo [option] pid
option
no option 输出全部的参数和系统属性
-flag name 输出对应名称的参数
-flag [+|-]name 开启或者关闭对应名称的参数
-flag name=value 设定对应名称的参数
-flags 输出全部的参数
-sysprops 输出系统属性。
示例
no option
work@authority-schedule-v1-fbf4cfd6d-86zhw:~$ jinfo 47
Attaching to process ID 47, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.222-b10
Java System Properties: // 第一部分: Java System Properties
java.runtime.name = OpenJDK Runtime Environment
java.vm.version = 25.222-b10
sun.boot.library.path = /usr/local/openjdk-8/jre/lib/amd64
java.protocol.handler.pkgs = org.springframework.boot.loader
java.vendor.url = http://java.oracle.com/
java.vm.vendor = Oracle Corporation
path.separator = :
file.encoding.pkg = sun.io
java.vm.name = OpenJDK 64-Bit Server VM
sun.os.patch.level = unknown
sun.java.launcher = SUN_STANDARD
user.dir = /home/work/www/authority-schedule/lib
java.vm.specification.name = Java Virtual Machine Specification
PID = 47
java.runtime.version = 1.8.0_222-b10
java.awt.graphicsenv = sun.awt.X11GraphicsEnvironment
os.arch = amd64
java.endorsed.dirs = /usr/local/openjdk-8/jre/lib/endorsed
line.separator =
java.io.tmpdir = /tmp
java.vm.specification.vendor = Oracle Corporation
os.name = Linux
sun.jnu.encoding = UTF-8
java.library.path = /usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
spring.beaninfo.ignore = true
java.specification.name = Java Platform API Specification
java.class.version = 52.0
sun.management.compiler = HotSpot 64-Bit Tiered Compilers
os.version = 4.18.20-2.el7.wuba.lp.x86_64
user.home = /home/work
user.timezone = Asia/Shanghai
catalina.useNaming = false
java.awt.printerjob = sun.print.PSPrinterJob
file.encoding = UTF-8
java.specification.version = 1.8
catalina.home = /tmp/tomcat.1163525377000352696.8080
org.springframework.boot.logging.LoggingSystem = com.renrenche.log.Log4J2LoggingSystemPatch
user.name = work
java.class.path = /home/work/www/authority-schedule/lib/authority-schedule.jar:/usr/local/jmx-exporter/jmx_prometheus_javaagent-0.14.0.jar
java.vm.specification.version = 1.8
sun.arch.data.model = 64
sun.java.command = /home/work/www/authority-schedule/lib/authority-schedule.jar --server.address=0.0.0.0 --spring.config.location=/home/work/www/authority-schedule/conf/ --spring.profiles.active=production --logging.config=/home/work/www/authority-schedule/conf/log4j2.yml
java.home = /usr/local/openjdk-8/jre
user.language = en
java.specification.vendor = Oracle Corporation
sun.misc.URLClassPath.disableJarChecking = true
awt.toolkit = sun.awt.X11.XToolkit
java.vm.info = mixed mode
java.version = 1.8.0_222
java.ext.dirs = /usr/local/openjdk-8/jre/lib/ext:/usr/java/packages/lib/ext
sun.boot.class.path = /usr/local/openjdk-8/jre/lib/resources.jar:/usr/local/openjdk-8/jre/lib/rt.jar:/usr/local/openjdk-8/jre/lib/sunrsasign.jar:/usr/local/openjdk-8/jre/lib/jsse.jar:/usr/local/openjdk-8/jre/lib/jce.jar:/usr/local/openjdk-8/jre/lib/charsets.jar:/usr/local/openjdk-8/jre/lib/jfr.jar:/usr/local/openjdk-8/jre/classes
java.awt.headless = true
java.vendor = Oracle Corporation
catalina.base = /tmp/tomcat.1163525377000352696.8080
file.separator = /
java.vendor.url.bug = http://bugreport.sun.com/bugreport/
sun.io.unicode.encoding = UnicodeLittle
sun.cpu.endian = little
LOG_PATH = /mnt/logs/authority-schedule
sun.cpu.isalist =
VM Flags: // 第二部分:jvm 参数
Non-default VM flags: -XX:CICompilerCount=2 -XX:CMSInitiatingOccupancyFraction=70 -XX:+CMSParallelRemarkEnabled -XX:+CMSScavengeBeforeRemark -XX:ConcGCThreads=2 -XX:ErrorFile=null -XX:GCLogFileSize=52428800 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=null -XX:InitialHeapSize=645922816 -XX:InitialRAMPercentage=null -XX:MaxHeapSize=645922816 -XX:MaxNewSize=174456832 -XX:MaxRAMPercentage=null -XX:MaxTenuringThreshold=6 -XX:MinHeapDeltaBytes=196608 -XX:MinRAMPercentage=null -XX:NewSize=174456832 -XX:NumberOfGCLogFiles=1 -XX:OldPLABSize=16 -XX:OldSize=471465984 -XX:ParallelGCThreads=2 -XX:+PrintGC -XX:+PrintGCApplicationStoppedTime -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintHeapAtGC -XX:+ScavengeBeforeFullGC -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseConcMarkSweepGC -XX:+UseGCLogFileRotation -XX:+UseParNewGC
Command line: -Dsun.misc.URLClassPath.disableJarChecking=true -DLOG_PATH=/mnt/logs/authority-schedule -XX:MaxRAMPercentage=30.0 -XX:InitialRAMPercentage=30.0 -XX:MinRAMPercentage=30.0 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/mnt/logs/authority-schedule/jvm -XX:ErrorFile=/mnt/logs/authority-schedule/jvm/jvm_err.log -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:ConcGCThreads=2 -XX:ParallelGCThreads=2 -XX:+ScavengeBeforeFullGC -XX:+CMSScavengeBeforeRemark -XX:+CMSParallelRemarkEnabled -XX:CMSInitiatingOccupancyFraction=70 -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=1 -XX:GCLogFileSize=50M -verbose:gc -XX:+PrintHeapAtGC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+PrintGCApplicationStoppedTime -Xloggc:/mnt/logs/authority-schedule/jvm/gc.log -javaagent:/usr/local/jmx-exporter/jmx_prometheus_javaagent-0.14.0.jar=9990:/usr/local/jmx-exporter/prometheus-jmx-config.yaml -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap
work@authority-schedule-v1-fbf4cfd6d-86zhw:~$
-flag name
查看指定的 jvm 参数的值
work@authority-schedule-v1-fbf4cfd6d-86zhw:~$
work@authority-schedule-v1-fbf4cfd6d-86zhw:~$ jinfo -flag PrintGC 47
-XX:+PrintGC
work@authority-schedule-v1-fbf4cfd6d-86zhw:~$ jinfo -flag PrintGCDetails 47
-XX:+PrintGCDetails
work@authority-schedule-v1-fbf4cfd6d-86zhw:~$ jinfo -flag PrintGCTimeStamps 47
-XX:+PrintGCTimeStamps
work@authority-schedule-v1-fbf4cfd6d-86zhw:~$
-flag [+|-]name
使用 jinfo 可以在不重启虚拟机的情况下,可以动态的修改 jvm 的参数。尤其在线上的环境特别有用。
work@authority-schedule-v1-679dd585c4-9rsf9:~$ jinfo -flag +PrintGC 47
work@authority-schedule-v1-679dd585c4-9rsf9:~$
work@authority-schedule-v1-679dd585c4-9rsf9:~$ jinfo -flag PrintGC 47
-XX:+PrintGC
work@authority-schedule-v1-679dd585c4-9rsf9:~$ jinfo -flag -PrintGC 47
work@authority-schedule-v1-679dd585c4-9rsf9:~$ jinfo -flag PrintGC 47
-XX:-PrintGC
work@authority-schedule-v1-679dd585c4-9rsf9:~$
-flag name=value 上一个示例主要是针对 boolean 值的参数设置的。如果是设置 value值,则需要使用 name=value 的形式。
work@authority-schedule-v1-679dd585c4-9rsf9:~$ jinfo -flag HeapDumpPath 47
-XX:HeapDumpPath=/mnt/logs/authority-schedule/jvm
work@authority-schedule-v1-679dd585c4-9rsf9:~$ jinfo -flag HeapDumpPath=/ 47
work@authority-schedule-v1-679dd585c4-9rsf9:~$ jinfo -flag HeapDumpPath 47
-XX:HeapDumpPath=/
work@authority-schedule-v1-679dd585c4-9rsf9:~$ jinfo -flag HeapDumpPath=/mnt/logs/authority-schedule/jvm 47
work@authority-schedule-v1-679dd585c4-9rsf9:~$ jinfo -flag HeapDumpPath 47
-XX:HeapDumpPath=/mnt/logs/authority-schedule/jvm
-sysprops
输出当前 jvm 进行的全部的系统属性
work@authority-schedule-v1-679dd585c4-9rsf9:~$ jinfo -sysprops 47
Attaching to process ID 47, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.222-b10
java.runtime.name = OpenJDK Runtime Environment
java.vm.version = 25.222-b10
sun.boot.library.path = /usr/local/openjdk-8/jre/lib/amd64
java.protocol.handler.pkgs = org.springframework.boot.loader
java.vendor.url = http://java.oracle.com/
java.vm.vendor = Oracle Corporation
path.separator = :
file.encoding.pkg = sun.io
java.vm.name = OpenJDK 64-Bit Server VM
sun.os.patch.level = unknown
sun.java.launcher = SUN_STANDARD
user.dir = /home/work/www/authority-schedule/lib
java.vm.specification.name = Java Virtual Machine Specification
PID = 47
java.runtime.version = 1.8.0_222-b10
java.awt.graphicsenv = sun.awt.X11GraphicsEnvironment
os.arch = amd64
java.endorsed.dirs = /usr/local/openjdk-8/jre/lib/endorsed
line.separator =
java.io.tmpdir = /tmp
java.vm.specification.vendor = Oracle Corporation
os.name = Linux
sun.jnu.encoding = UTF-8
java.library.path = /usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
spring.beaninfo.ignore = true
java.specification.name = Java Platform API Specification
java.class.version = 52.0
sun.management.compiler = HotSpot 64-Bit Tiered Compilers
os.version = 4.18.20-2.el7.wuba.lp.x86_64
user.home = /home/work
user.timezone = Asia/Shanghai
catalina.useNaming = false
java.awt.printerjob = sun.print.PSPrinterJob
file.encoding = UTF-8
java.specification.version = 1.8
catalina.home = /tmp/tomcat.1577318281902238479.8082
org.springframework.boot.logging.LoggingSystem = com.renrenche.log.Log4J2LoggingSystemPatch
user.name = work
java.class.path = /home/work/www/authority-schedule/lib/authority-schedule.jar:/usr/local/jmx-exporter/jmx_prometheus_javaagent-0.14.0.jar
java.vm.specification.version = 1.8
sun.arch.data.model = 64
sun.java.command = /home/work/www/authority-schedule/lib/authority-schedule.jar --server.address=0.0.0.0 --spring.config.location=/home/work/www/authority-schedule/conf/ --spring.profiles.active=testing --logging.config=/home/work/www/authority-schedule/conf/log4j2.yml
java.home = /usr/local/openjdk-8/jre
user.language = en
java.specification.vendor = Oracle Corporation
sun.misc.URLClassPath.disableJarChecking = true
awt.toolkit = sun.awt.X11.XToolkit
java.vm.info = mixed mode
java.version = 1.8.0_222
java.ext.dirs = /usr/local/openjdk-8/jre/lib/ext:/usr/java/packages/lib/ext
sun.boot.class.path = /usr/local/openjdk-8/jre/lib/resources.jar:/usr/local/openjdk-8/jre/lib/rt.jar:/usr/local/openjdk-8/jre/lib/sunrsasign.jar:/usr/local/openjdk-8/jre/lib/jsse.jar:/usr/local/openjdk-8/jre/lib/jce.jar:/usr/local/openjdk-8/jre/lib/charsets.jar:/usr/local/openjdk-8/jre/lib/jfr.jar:/usr/local/openjdk-8/jre/classes
java.awt.headless = true
java.vendor = Oracle Corporation
catalina.base = /tmp/tomcat.1577318281902238479.8082
file.separator = /
java.vendor.url.bug = http://bugreport.sun.com/bugreport/
sun.io.unicode.encoding = UnicodeLittle
sun.cpu.endian = little
LOG_PATH = /mnt/logs/authority-schedule
sun.cpu.isalist =
work@authority-schedule-v1-679dd
注意
jinfo虽然可以在java程序运行时动态地修改虚拟机参数,但并不是所有的参数都支持动态修改。参数只有被标记 manageable的flag可以被实时修改。
查看被标记为manageable的参数
work@authority-schedule-v1-679dd585c4-9rsf9:~$ java -XX:+PrintFlagsFinal -version | grep manageable
intx CMSAbortablePrecleanWaitMillis = 100 {manageable}
intx CMSTriggerInterval = -1 {manageable}
intx CMSWaitDuration = 2000 {manageable}
bool HeapDumpAfterFullGC = false {manageable}
bool HeapDumpBeforeFullGC = false {manageable}
bool HeapDumpOnOutOfMemoryError = false {manageable}
ccstr HeapDumpPath = {manageable}
uintx MaxHeapFreeRatio = 70 {manageable}
uintx MinHeapFreeRatio = 40 {manageable}
bool PrintClassHistogram = false {manageable}
bool PrintClassHistogramAfterFullGC = false {manageable}
bool PrintClassHistogramBeforeFullGC = false {manageable}
bool PrintConcurrentLocks = false {manageable}
bool PrintGC = false {manageable}
bool PrintGCDateStamps = false {manageable}
bool PrintGCDetails = false {manageable}
bool PrintGCID = false {manageable}
bool PrintGCTimeStamps = false {manageable}
openjdk version "1.8.0_222"
OpenJDK Runtime Environment (build 1.8.0_222-b10)
OpenJDK 64-Bit Server VM (build 25.222-b10, mixed mode)
work@authority-schedule-v1-679dd585c4-9rsf9:~$
引用