jinfo命令介绍jinfo(JavaVirtualMachineConfigurationInformation)是JDK提供的一个命令行工具,可以实时查看Java虚拟机的各种配置参数和系统属性。使用jps命令的-v参数可以查看Java虚拟机启动时明确指定的配置参数。如果要查看没有明确指定的配置参数,可以使用jinfo命令查看。另外jinfo命令还可以查询Java虚拟机进程的System.getProperties()的内容。在没有dbgeng.dll的Windows系统中,jinfo命令必须安装Windows调试工具才能正常工作,并且PATH环境变量中应包含jvm.dll的位置。jinfo命令参数命令语法:jinfo[option]pid命令参数说明:option:jinfo命令的可选参数。如果未指定此参数,jinfo命令将显示所有配置参数和系统属性。pid:要打印其配置信息的Java虚拟机的进程号。要获取正在运行的Java虚拟机进程的列表,请使用ps命令(在Linux系统上)或tasklist命令(在Windows系统上),或者如果Java虚拟机进程未在单独的docker实例中运行,则使用jps命令。选项有哪些参数?让我们来看看。-flagname显示指定name对应的配置参数,例如查看simpleGC日志模式(PrintGC)是否开启:#jinfo-flagPrintGC15729-XX:-PrintGC-flag[+|-]nameenablesor禁用指定的名称参数,该参数必须是布尔类型。例如开启simpleGClog模式:#jinfo-flag+PrintGC15729#jinfo-flagPrintGC15729-XX:+PrintGC例如关闭simpleGClog模式:#jinfo-flag-PrintGC15729#jinfo-flagPrintGC15729-XX:-PrintGC-flagname=value无需重启Java虚拟机,将指定名称的参数修改为指定值。例如修改空闲堆空间的最小百分比(MinHeapFreeRatio)为30%:#jinfo-flagMinHeapFreeRatio15729-XX:MinHeapFreeRatio=40#jinfo-flagMinHeapFreeRatio=3015729#jinfo-flagMinHeapFreeRatio15729-XX:MinHeapFreeRatio=30当然不是所有参数都可以这样修改,比如并发垃圾收集器将使用的线程数(ConcGCThreads):#jinfo-flagConcGCThreads=515729Exceptioninthread"main"com.sun.tools.attach.AttachOperationFailedException:在sun.tools.attach.LinuxVirtualMachine.execute(LinuxVirtualMachine.java:229)在sun.tools.attach.HotSpotVirtualMachine.executeCommand(HotSpotVirtualMachine.java:261)在sun.tools.attach.HotSpotVirtualMachine.setMachineFlag(HotSpot.javaVirtual:234)atsun.tools.jinfo.JInfo.flag(JInfo.java:134)atsun.tools.jinfo.JInfo.main(JInfo.java:81)那么,哪些配置参数支持动态修改?我们可以通过java-XX:+PrintFlagsInitial命令找到标记为可管理的配置参数。运行结果如下图所示:-flags显示所有配置参数,例如:#jinfo-flags15729AttachingtoprocessID15729,pleasewait...调试中r附加成功。检测到服务器编译器。JVM版本为25.251-b08非默认VM标志:-XX:CICompilerCount=4-XX:ConcGCThreads=2-XX:G1HeapRegionSize=1048576-XX:InitialHeapSize=107374189-Xize3XX:MaxHeapSize=1073741824-XX:MaxNewSize=536870912-XX:MetaspaceSize=268435456-XX:MinHeapDeltaBytes=1048576-XX:MinHeapFreeRatio=30-XX:NewSize=536870912-XX:-XPrintvorGC-XX:Sur+UseCompressedClassPointers-XX:+UseCompressedOops-XX:+UseTimeUnordered-XX:+UseG1GC命令行:-Xmx1g-Xms1g-Xmn512m-XX:SurvivorRatio=4-XX:MetaspaceSize=256m-XX:+UseG1GC-key-value对中的sysprops显示当前Java虚拟机的所有系统属性,对于示例:#jinfo-sysprops15729AttachingtoprocessID15729,pleasewait...Debuggerattachedsuccessfully.Servercompilerdetected.JVMversionis25.251-b08java.runtime.name=Java(TM)SERuntimeEnvironmentjava.vm.version=25.251-b08sun.boot.library.path=/usr/local/java/jdk1.8.0_251/jre/lib/amd64java.protocol.handler.pkgs=org.springframework.boot.loaderjava.vendor.url=http://java.oracle.com/java.vm.vendor=OracleCorporationpath.separator=:file.encoding.pkg=sun.iojava.vm。name=JavaHotSpot(TM)64位服务器VMsun.os.patch.level=unknownsun.java.launcher=SUN_STANDARDuser.country=CNjava.vm.specification.name=Java虚拟机规范PID=15729java.runtime.version=1.8。0_251-b08java.awt.graphicsenv=sun.awt.X11GraphicsEnvironmentos.arch=amd64java.endorsed.dirs=/usr/local/java/jdk1.8.0_251/jre/lib/endorsedline.separator=......-h-help显示jinfo命令帮助信息的结尾。虽然jinfo命令已经推出了很长时间,使用也越来越频繁,但它仍然是一个“实验性且不受支持”(ExperimentalandUnsupported)的工具,未来可能会转换为常规位置。也有可能在某个JDK版本中悄无声息的消失了。所以,用它,珍惜它。最后,谢谢你这么帅,给我点赞和关注。
