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官方的API文档中,接口HotSpotDiagnosticMXBean有一个getDiagnosticOptions()的方法,返回所有可动态修改的JVM参数。通过接口HotSpotDiagnosticMXBean的实现类 - HotSpotDiagnostic来调用这个方法。
使用Java代码调用查看:
HotSpotDiagnostic mxBean = new HotSpotDiagnostic();
List<VMOption> diagnosticVMOptions = 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
转载于:https://my.oschina.net/javamaster/blog/1833908