jinfo(Configuration Info For Java),檢視虛拟機配置的參數,也可以用于調整虛拟機的配置參數。在很多情況下,Java應用程式不會指定所有的Java虛拟機參數。而此時,開發人員可能不知道某一具體的Java虛拟機參數的預設值。這種情況下,可能需要通過檢視文檔才能夠擷取到參數的預設值。這個查找過程是非常麻煩的,但是有了jinfo工具,開發人員可以很友善的找到Java虛拟機的目前參數的預設值。
- jinfo -help:(參數由option和pid構成)
C:\Users\lenovo>jinfo -help Usage: jinfo [option] <pid> (to connect to running process) jinfo [option] <executable <core> (to connect to a core file) jinfo [option] [[email protected]]<remote server IP or hostname> (to connect to remote debug server) where <option> is one of: -flag <name> to print the value of the named VM flag -flag [+|-]<name> to enable or disable the named VM flag -flag <name>=<value> to set the named VM flag to the given value -flags to print VM flags -sysprops to print Java system properties <no option> to print both of the above -h | -help to print this help message
- 檢視
- jinfo -sysprops <pid>:可以檢視有System.getProperties( )擷取的參數
C:\Users\lenovo>jinfo -sysprops 12320 Attaching to process ID 12320, please wait... Debugger attached successfully. Server compiler detected. JVM version is 25.91-b15 java.runtime.name = Java(TM) SE Runtime Environment java.vm.version = 25.91-b15 sun.boot.library.path = D:\Java\jdk1.8.0_91\jre\bin java.vendor.url = http://java.oracle.com/ java.vm.vendor = Oracle Corporation path.separator = ; 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 user.dir = E:\WorkingSpace\IdeaProjects\demo002 java.vm.specification.name = Java Virtual Machine Specification java.runtime.version = 1.8.0_91-b15 java.awt.graphicsenv = sun.awt.Win32GraphicsEnvironment os.arch = amd64 java.endorsed.dirs = D:\Java\jdk1.8.0_91\jre\lib\endorsed visualvm.id = 2253270708934000 line.separator = java.io.tmpdir = C:\Users\lenovo\AppData\Local\Temp\ java.vm.specification.vendor = Oracle Corporation user.variant = os.name = Windows 10 sun.jnu.encoding = GBK java.library.path = D:\Java\jdk1.8.0_91\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:\Python39\Scripts\;C:\Python39\;D:\Program Files (x86)\NetSarang\Xftp 6\;D:\Program Files (x86)\xshell\;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files\NVIDIA Corporation\NVIDIA NvDLISR;d:\Program Files\Git\cmd;%JAVA_HOME%\bin;%MAVEN_HOME%\bin;%CURL_HOME%\bin;%TOMCAT%\bin;D:\Program Files\Android\Sdk\platform-tools;%NGINX%;C:\ProgramData\chocolatey\bin;D:\Program Files (x86)\nodejs\;C:\Program Files\MySQL\MySQL Shell 8.0\bin\;C:\Users\lenovo\AppData\Local\Microsoft\WindowsApps;d:\Program Files\JetBrains\IntelliJ IDEA 2020.2\bin;;D:\Program Files\apache-maven-3.6.3\bin;C:\Program Files\MySQL\MySQL Server 8.0\bin;D:\Java\jdk1.8.0_91\bin;;D:\Program Files\JetBrains\WebStorm 2021.1\bin;;C:\Users\lenovo\AppData\Roaming\npm;. java.specification.name = Java Platform API Specification java.class.version = 52.0 sun.management.compiler = HotSpot 64-Bit Tiered Compilers os.version = 10.0 user.home = C:\Users\lenovo user.timezone = java.awt.printerjob = sun.awt.windows.WPrinterJob file.encoding = UTF-8 java.specification.version = 1.8 user.name = lenovo java.class.path = D:\Java\jdk1.8.0_91\jre\lib\charsets.jar;D:\Java\jdk1.8.0_91\jre\lib\deploy.jar;D:\Java\jdk1.8.0_91\jre\lib\ext\access-bridge-64.jar;D:\Java\jdk1.8.0_91\jre\lib\ext\cldrdata.jar;D:\Java\jdk1.8.0_91\jre\lib\ext\dnsns.jar;D:\Java\jdk1.8.0_91\jre\lib\ext\jaccess.jar;D:\Java\jdk1.8.0_91\jre\lib\ext\jfxrt.jar;D:\Java\jdk1.8.0_91\jre\lib\ext\localedata.jar;D:\Java\jdk1.8.0_91\jre\lib\ext\nashorn.jar;D:\Java\jdk1.8.0_91\jre\lib\ext\sunec.jar;D:\Java\jdk1.8.0_91\jre\lib\ext\sunjce_provider.jar;D:\Java\jdk1.8.0_91\jre\lib\ext\sunmscapi.jar;D:\Java\jdk1.8.0_91\jre\lib\ext\sunpkcs11.jar;D:\Java\jdk1.8.0_91\jre\lib\ext\zipfs.jar;D:\Java\jdk1.8.0_91\jre\lib\javaws.jar;D:\Java\jdk1.8.0_91\jre\lib\jce.jar;D:\Java\jdk1.8.0_91\jre\lib\jfr.jar;D:\Java\jdk1.8.0_91\jre\lib\jfxswt.jar;D:\Java\jdk1.8.0_91\jre\lib\jsse.jar;D:\Java\jdk1.8.0_91\jre\lib\management-agent.jar;D:\Java\jdk1.8.0_91\jre\lib\plugin.jar;D:\Java\jdk1.8.0_91\jre\lib\resources.jar;D:\Java\jdk1.8.0_91\jre\lib\rt.jar;E:\WorkingSpace\IdeaProjects\demo002\target\classes;D:\.m2\repository\org\slf4j\jcl-over-slf4j\1.7.13\jcl-over-slf4j-1.7.13.jar;D:\.m2\repository\org\slf4j\slf4j-api\1.7.13\slf4j-api-1.7.13.jar;D:\.m2\repository\org\springframework\spring-core\5.2.9.RELEASE\spring-core-5.2.9.RELEASE.jar;D:\.m2\repository\org\springframework\spring-jcl\5.2.9.RELEASE\spring-jcl-5.2.9.RELEASE.jar;D:\.m2\repository\org\springframework\spring-beans\5.2.9.RELEASE\spring-beans-5.2.9.RELEASE.jar;D:\.m2\repository\org\springframework\spring-tx\5.2.9.RELEASE\spring-tx-5.2.9.RELEASE.jar;D:\.m2\repository\org\springframework\spring-context\5.2.9.RELEASE\spring-context-5.2.9.RELEASE.jar;D:\.m2\repository\org\springframework\spring-aop\5.2.9.RELEASE\spring-aop-5.2.9.RELEASE.jar;D:\.m2\repository\org\springframework\spring-expression\5.2.9.RELEASE\spring-expression-5.2.9.RELEASE.jar;D:\.m2\repository\org\springframework\spring-web\5.2.9.RELEASE\spring-web-5.2.9.RELEASE.jar;D:\.m2\repository\org\springframework\spring-context-support\5.2.9.RELEASE\spring-context-support-5.2.9.RELEASE.jar;D:\.m2\repository\javax\mail\mail\1.4.1\mail-1.4.1.jar;D:\.m2\repository\javax\activation\activation\1.1\activation-1.1.jar;D:\.m2\repository\org\junit\jupiter\junit-jupiter-api\5.8.0-M1\junit-jupiter-api-5.8.0-M1.jar;D:\.m2\repository\org\apiguardian\apiguardian-api\1.1.1\apiguardian-api-1.1.1.jar;D:\.m2\repository\org\opentest4j\opentest4j\1.2.0\opentest4j-1.2.0.jar;D:\.m2\repository\org\junit\platform\junit-platform-commons\1.8.0-M1\junit-platform-commons-1.8.0-M1.jar;D:\Program Files\JetBrains\IntelliJ IDEA 2018.2.5\lib\idea_rt.jar java.vm.specification.version = 1.8 sun.arch.data.model = 64 sun.java.command = com.booyue.tlh.gclog.TestJVMTools 1 2 3 4 5 java.home = D:\Java\jdk1.8.0_91\jre user.language = zh java.specification.vendor = Oracle Corporation awt.toolkit = sun.awt.windows.WToolkit java.vm.info = mixed mode java.version = 1.8.0_91 java.ext.dirs = D:\Java\jdk1.8.0_91\jre\lib\ext;C:\Windows\Sun\Java\lib\ext sun.boot.class.path = D:\Java\jdk1.8.0_91\jre\lib\resources.jar;D:\Java\jdk1.8.0_91\jre\lib\rt.jar;D:\Java\jdk1.8.0_91\jre\lib\sunrsasign.jar;D:\Java\jdk1.8.0_91\jre\lib\jsse.jar;D:\Java\jdk1.8.0_91\jre\lib\jce.jar;D:\Java\jdk1.8.0_91\jre\lib\charsets.jar;D:\Java\jdk1.8.0_91\jre\lib\jfr.jar;D:\Java\jdk1.8.0_91\jre\classes java.vendor = Oracle Corporation file.separator = \ java.vendor.url.bug = http://bugreport.sun.com/bugreport/ sun.io.unicode.encoding = UnicodeLittle sun.cpu.endian = little sun.desktop = windows sun.cpu.isalist = amd64
- jinfo -flags <pid>:檢視曾經指派的一些參數
C:\Users\lenovo>jinfo -flags 12320 Attaching to process ID 12320, please wait... Debugger attached successfully. Server compiler detected. JVM version is 25.91-b15 Non-default VM flags: -XX:CICompilerCount=4 -XX:InitialHeapSize=20971520 -XX:MaxHeapSize=52428800 -XX:MaxNewSize=10485760 -XX:MinHeapDeltaBytes=524288 -XX:NewSize=10485760 -XX:OldSize=10485760 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseFastUnorderedTimeStamps -XX:-UseLargePagesIndividualAllocation -XX:+UseParallelGC Command line: -Dvisualvm.id=2253270708934000 -Xms20m -Xmx50m -Xmn10m -javaagent:D:\Program Files\JetBrains\IntelliJ IDEA 2018.2.5\lib\idea_rt.jar=64196:D:\Program Files\JetBrains\IntelliJ IDEA 2018.2.5\bin -Dfile.encoding=UTF-8
- jinfo -flag <具體參數> <pid>:檢視某個java程序具體參數的值(檢視系統是否啟用了并行垃圾收集器,結果顯示-XX:+UseParallelGC,說明系統啟用了并行的垃圾收集器)
C:\Users\lenovo>jinfo -flag UseParallelGC 12320 -XX:+UseParallelGC
- jinfo -sysprops <pid>:可以檢視有System.getProperties( )擷取的參數
- 修改(這裡需要注意的一點是,并非所有的參數都支援修改,隻有被标記為manageable的flag可以被實時修改:java -XX:+PrintFlagsFinal -version | grep manageable 可以檢視)
[[email protected] ~]# java -XX:+PrintFlagsFinal -version | grep manageable intx CMSAbortablePrecleanWaitMillis = 100 {manageable} intx CMSTriggerInterval = -1 {manageable} intx CMSWaitDuration = 2000 {manageable} bool HeapDumpAfterFullGC = false {manageable} bool HeapDumpBeforeFullGC = false {manageable} bool HeapDumpOnOutOfMemoryError = false {manageable} ccstr HeapDumpPath = {manageable} uintx MaxHeapFreeRatio = 100 {manageable} uintx MinHeapFreeRatio = 0 {manageable} bool PrintClassHistogram = false {manageable} bool PrintClassHistogramAfterFullGC = false {manageable} bool PrintClassHistogramBeforeFullGC = false {manageable} bool PrintConcurrentLocks = false {manageable} bool PrintGC = false {manageable} bool PrintGCDateStamps = false {manageable} bool PrintGCDetails = false {manageable} bool PrintGCID = false {manageable} bool PrintGCTimeStamps = false {manageable} java version "1.8.0_191" Java(TM) SE Runtime Environment (build 1.8.0_191-b12) Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)
- jinfo -flag [+/-]<具體參數> <pid> :針對boolean類型的值修改(先檢視了是否開啟了PrintGCDetails ,發現沒有開啟,接着開啟了PrintGCDetails )
C:\Users\lenovo>jinfo -flag PrintGCDetails 26948 -XX:-PrintGCDetails C:\Users\lenovo>jinfo -flag +PrintGCDetails 26948 C:\Users\lenovo>jinfo -flag PrintGCDetails 26948 -XX:+PrintGCDetails
- jinfo -flag <具體參數=具體參數值> <pid>:針對非boolea類型的值修改
- jinfo -flag [+/-]<具體參數> <pid> :針對boolean類型的值修改(先檢視了是否開啟了PrintGCDetails ,發現沒有開啟,接着開啟了PrintGCDetails )