jinfo.exe 是 JDK 中的一个命令行工具,用于查看或调整 Java 虚拟机(JVM)的配置参数和系统属性。当 Java 应用程序没有指定所有 JVM 参数时,开发人员可以使用 jinfo 来查找某个参数的默认值。在性能调优和故障排查时,可以使用 jinfo 来查看或修改 JVM 的配置参数。
jinfo 工具特点:
(1)实时性:jinfo 可以实时查看 JVM 的配置参数和系统属性。
(2)动态性:虽然并非所有参数都支持动态修改,但 jinfo 可以在运行时修改部分参数并使其立即生效。
连接正在运行的进程:
jinfo [option] <pid>
连接到核心文件:
jinfo [option] <executable <core>
连接远程调试服务器:
jinfo [option] [server_id@]<remote server IP or hostname>
jinfo 命令支持如下选项:
-flag <name> 打印指定虚拟机标志的值
-flag [+|-]<name> 启用或禁用指定的虚拟机标记
-flag <name>=<value> 将指定的虚拟机标志设置为给定值
-flags 打印虚拟机标志
-sysprops 打印 Java 系统属性
<no option> 打印上述两个选项
-h | -help 打印帮助信息
(1)查看 JVM 的 PrintGC 参数值,如下:
D:\share_dir\ShareDoc> jinfo -flag PrintGC 21108 -XX:+PrintGC
上面命令将返回 PrintGC 参数的当前值。
(2)下面示例将动态开启 PrintGC 参数,使 JVM 开始打印 GC 日志。如下:
D:\share_dir\ShareDoc> jinfo -flag +PrintGC 21108
注意:并非所有参数都支持动态修改,这里假设 PrintGC 参数支持动态修改。
(3)查看所有 JVM 参数,如下:
D:\share_dir\ShareDoc> jinfo -flags 21108 Attaching to process ID 21108, please wait... Debugger attached successfully. Server compiler detected. JVM version is 25.45-b02 Non-default VM flags: -XX:-BytecodeVerificationLocal -XX:-BytecodeVerificationRemote -XX:CICompilerCount=3 -XX:InitialHeapSize=264241152 -XX:+ManagementServer -XX:MaxHeapSize=4227858432 -XX:MaxNewSize=1409286144 -XX:MinHeapDeltaBytes=524288 -XX:NewSize=88080384 -XX:OldSize=176160768 -XX:+PrintGC -XX:TieredStopAtLevel=1 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseFastUnorderedTimeStamps -XX:-UseLargePagesIndividualAllocation -XX:+UseParallelGC Command line: -XX:TieredStopAtLevel=1 -Xverify:none -Dspring.output.ansi.enabled=always -Dcom.sun.management.jmxremote -Dspring.jmx.enabled=true -Dspring.liveBeansView.mbeanDomain -Dspring.application.admin.enabled=true -Dmanagement.endpoints.jmx.exposure.include=* -javaagent:D:\Program Files\JetBrains\IntelliJ IDEA 2023.1.1\lib\idea_rt.jar=58994:D:\Program Files\JetBrains\IntelliJ IDEA 2023.1.1\bin -Dfile.encoding=UTF-8
该命令将返回所有 JVM 参数的当前值。
(4)查看 Java 系统属性,如下:
D:\share_dir\ShareDoc> jinfo -sysprops 21108 Attaching to process ID 21108, please wait... Debugger attached successfully. Server compiler detected. JVM version is 25.45-b02 spring.output.ansi.enabled = always java.runtime.name = Java(TM) SE Runtime Environment java.vm.version = 25.45-b02 sun.boot.library.path = D:\ProgramFilesFree\Java\jdk1.8.0_45\jre\bin java.vendor.url = http://java.oracle.com/ java.vm.vendor = Oracle Corporation path.separator = ; java.rmi.server.randomIDs = true file.encoding.pkg = sun.io java.vm.name = Java HotSpot(TM) 64-Bit Server VM sun.os.patch.level = sun.java.launcher = SUN_STANDARD user.script = user.country = CN management.endpoints.jmx.exposure.include = * ...
该命令将返回Java系统属性的当前值。