jinfo 是 JDK 提供的一个查看 JVM 系统配置信息和启动参数的命令, 并且它可以在 JVM 运行状态下修改某些参数. 在 JDK 8 之后, jinfo 的很多功能都可以被新的工具 jcmd 所拥有, 更推荐使用 jcmd.
获取 java 线程 42596 的相关信息:
host:Downloads xiatian$ jinfo 42596
Attaching to process ID 42596, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.141-b15
Java System Properties:
java.vendor = Oracle Corporation
java.vm.info = mixed mode
line.separator =
java.vm.name = Java HotSpot(TM) 64-Bit Server VM
org.apache.commons.logging.Log = org.apache.commons.logging.impl.NoOpLog
-XX:+UseG1GC
-XX:+UseStringDeduplication
-XstartOnFirstThread
-Dorg.eclipse.swt.internal.carbon.smallFonts
-Dosgi.requiredJavaVersion=1.8
-Xms256m
-Xmx1024m
-Declipse.p2.max.threads=10
java.specification.version = 1.8
VM Flags:
Non-default VM flags: -XX:CICompilerCount=4 -XX:ConcGCThreads=2 -XX:G1HeapRegionSize=1048576 -XX:InitialHeapSize=268435456 -XX:MarkStackSize=4194304 -XX:MaxHeapSize=1073741824 -XX:MaxNewSize=643825664 -XX:MinHeapDeltaBytes=1048576 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseFastUnorderedTimeStamps -XX:+UseG1GC -XX:+UseStringDeduplication
Command line: -Dosgi.requiredJavaVersion=1.8 -Dosgi.instance.area.default=@user.home/eclipse-workspace -XX:+UseG1GC -XX:+UseStringDeduplication -XstartOnFirstThread -Dorg.eclipse.swt.internal.carbon.smallFonts -Dosgi.requiredJavaVersion=1.8 -Xms256m -Xmx1024m -Xdock:icon=../Resources/Eclipse.icns -XstartOnFirstThread -Dorg.eclipse.swt.internal.carbon.smallFonts -Declipse.p2.max.threads=10
jinfo 还可以设置某些 JVM 参数, 比如:
jinfo -flag +PrintGCDetails 42596
那些参数变量是可以运行时通过 jinfo 更改的呢? 可以通过下面的命令获取当前 JRE 支持的运行时可更改的 flags:
java -XX:+PrintFlagsFinal -version|grep manageable

或者查看官方页面(https://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html), 凡是标明 Manageable 的, 都是可以运行时可更改的.
一个例子是: 如果你发现有 JVM 可能有 OOM 的风险, 那么你可以通过 jinfo 立即设置: HeapDumpOnOutOfMemoryError & HeapDumpPath, 那么当它 OOM 时, 它自动做一个 heap dump.