jinfo全称Java Configuration Info,主要作用是实时查看和调整JVM配置参数。
一.查看JVM参数
用法:jinfo -flag <name> PID
示例:
# jinfo -flag MaxMetaspaceSize 11180
# -XX:MaxMetaspaceSize=536870912
表示 MaxMetaspaceSize的大小为512M
注意:如果没有配置,就会显示一个超大的数字:
# -XX:MaxMetaspaceSize=18446744073709547520
# jinfo -flag ThreadStackSize 8752
# -XX:ThreadStackSize=256
表示Xss(线程堆栈大小)为256K
注意:如果没有配置,显示数量为0:
# -XX:ThreadStackSize=0
二.调整JVM参数
(1)布尔类型的JVM参数
用法:jinfo -flag [+|-]<name> PID
生效或者失效指定名字的参数
(2)数字/字符串类型的JVM参数
用法:jinfo -flag <name>=<value> PID
使用给定的值,设置参数的值
注意:如果出现,
Exception in thread "main" java.io.IOException: Command failed in target VM at sun.tools.attach.WindowsVirtualMachine.execute(WindowsVirtualMachine.java:112) at sun.tools.attach.HotSpotVirtualMachine.executeCommand(HotSpotVirtualMachine.java:217) at sun.tools.attach.HotSpotVirtualMachine.setFlag(HotSpotVirtualMachine.java:190) at sun.tools.jinfo.JInfo.flag(JInfo.java:123) at sun.tools.jinfo.JInfo.main(JInfo.java:76)
则表示,对这个flag参数不支持。
三.查看支持动态修改的JVM参数
官方文档中这样描述:标记为manageable的参数通过JConsole或者通过HotSpotDiagnosticMXBean这个类的接口查看。
(1)通过JConsole查看标记为manageable的Flags
Linux下:java -XX:+PrintFlagsInitial | grep manageable
Windows下:java -XX:+PrintFlagsInitial | findstr manageable
(2)通过HotSpotDiagnosticMXBean
Java官方的中,接口HotSpotDiagnosticMXBean有一个getDiagnosticOptions()的方法,返回所有可动态修改的JVM参数。通过接口HotSpotDiagnosticMXBean的实现类 - HotSpotDiagnostic来调用这个方法。
使用Java代码调用查看:
HotSpotDiagnostic mxBean = new HotSpotDiagnostic();ListdiagnosticVMOptions = mxBean.getDiagnosticOptions();System.out.println("Writeable VM option: ");for (VMOption vmOption:diagnosticVMOptions){ System.out.println(" "+vmOption.getName() + " = " + vmOption.getValue());}
运行结果:
Writeable VM option: HeapDumpBeforeFullGC = false HeapDumpAfterFullGC = false HeapDumpOnOutOfMemoryError = false HeapDumpPath = CMSAbortablePrecleanWaitMillis = 100 CMSWaitDuration = 2000 CMSTriggerInterval = -1 PrintGC = false PrintGCDetails = false PrintGCDateStamps = false PrintGCTimeStamps = false PrintGCID = false PrintClassHistogramBeforeFullGC = false PrintClassHistogramAfterFullGC = false PrintClassHistogram = false MinHeapFreeRatio = 0 MaxHeapFreeRatio = 100 PrintConcurrentLocks = false UnlockCommercialFeatures = false
参考资料: