JVM虛擬機性能監(jiān)控與故障處理工具介紹
引言
定位線上問題時,知識和經(jīng)驗是關鍵基礎,數(shù)據(jù)是依據(jù),數(shù)據(jù)包括運行日志,異常堆棧,GC日志,線程快照(threaddump/javacore文件),堆轉儲快照(headdump/hprof文件)等
JDK監(jiān)控和故障處理工具
命令 | 作用 |
---|---|
jps | 顯示指定系統(tǒng)內(nèi)所有HotSpot虛擬機進程 |
jstat | 收集HotSpot虛擬機各方面運行數(shù)據(jù) |
jinfo | 顯示虛擬機配置信息 |
jmap | 生成虛擬機的內(nèi)部轉儲快照(heapdump文件) |
jhat | 分析heapdump文件 |
jstack | 顯示虛擬機線程快照 |
jps:虛擬機進程狀況工具
顯示指定系統(tǒng)內(nèi)所有HotSpot虛擬機進程
常用選項
選項 | 作用 |
---|---|
-q | 只輸出LVMID |
-m | 輸出虛擬機啟動時傳遞給主類main函數(shù)的參數(shù) |
-l | 輸出主類全名 |
-v | 顯示虛擬機啟動時的JVM參數(shù) |
[oracle@wcdev ~]$ jps 20560 Server 24748 Rcu 17387 Server 14824 Jps 20635 Server 27844 Server 10658 Server 5713 Server 10738 Server 6594 NodeManager 10705 Server 29681 Server [oracle@wcdev ~]$
jstat:虛擬機統(tǒng)計信息監(jiān)視工具
收集HotSpot虛擬機各方面運行數(shù)據(jù)
常用選項
選項 | 作用 |
---|---|
-class | 監(jiān)視類裝載,卸載數(shù)量,總空間以及類裝載所耗費的時間 |
-gc | 監(jiān)視JAVA堆狀況,包括Eden區(qū),兩個survivor區(qū),老年代,永久代等 |
查詢進程20560的信息,1000毫秒一次,執(zhí)行10次
[oracle@wcdev ~]$ jstat -gc 20560 1000 10 HeapSize NurserySize UsedHeapSize YC OC YCTime OCTime GCTime YCPauseTime OCPauseTime PauseTime 4194304.0 1528649.8 1132960.1 2735 501 309.990 173.831 483.821 310.056 173.843 483.899 4194304.0 1528649.8 1132960.1 2735 501 309.990 173.831 483.821 310.056 173.843 483.899 4194304.0 1528649.8 1132960.1 2735 501 309.990 173.831 483.821 310.056 173.843 483.899 4194304.0 1528649.8 1132960.1 2735 501 309.990 173.831 483.821 310.056 173.843 483.899 4194304.0 1528649.8 1132960.1 2735 501 309.990 173.831 483.821 310.056 173.843 483.899 4194304.0 1528649.8 1132960.1 2735 501 309.990 173.831 483.821 310.056 173.843 483.899 4194304.0 1528649.8 1132960.1 2735 501 309.990 173.831 483.821 310.056 173.843 483.899 4194304.0 1528649.8 1132960.1 2735 501 309.990 173.831 483.821 310.056 173.843 483.899 4194304.0 1528649.8 1132960.1 2735 501 309.990 173.831 483.821 310.056 173.843 483.899 4194304.0 1528649.8 1132960.1 2735 501 309.990 173.831 483.821 310.056 173.843 483.899 [oracle@wcdev ~]$
jinfo:JAVA配置信息工具
jinfo可以查看和調(diào)整虛擬機各項參數(shù),使用 jinfo 可以在不重啟虛擬機的情況下,可以動態(tài)的修改 jvm 的參數(shù)
常用選項
選項 | 作用 |
---|---|
-flag | 輸出對應名稱的參數(shù) |
-flag [+/-]name | 開啟或者關閉對應名稱的參數(shù) |
jinfo pid
C:\Users\zero>jps -l 12080 com.example.offer.leecode.t20201015.CanJump 16112 sun.tools.jps.Jps 6292 org.jetbrains.idea.maven.server.RemoteMavenServer36 12940 org.jetbrains.kotlin.daemon.KotlinCompileDaemon 16284 org.jetbrains.jps.cmdline.Launcher 17388 C:\Users\zero>jinfo 12080 Attaching to process ID 12080, please wait... Debugger attached successfully. Server compiler detected. JVM version is 25.102-b14 Java System Properties: java.runtime.name = Java(TM) SE Runtime Environment java.vm.version = 25.102-b14 sun.boot.library.path = C:\Program Files\Java\Java1.8.1\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 = F:\GitCode\zero\TestExcel java.vm.specification.name = Java Virtual Machine Specification java.runtime.version = 1.8.0_102-b14 java.awt.graphicsenv = sun.awt.Win32GraphicsEnvironment os.arch = amd64 java.endorsed.dirs = C:\Program Files\Java\Java1.8.1\jre\lib\endorsed line.separator = java.io.tmpdir = C:\Users\zero\AppData\Local\Temp\ java.vm.specification.vendor = Oracle Corporation user.variant = os.name = Windows 10 sun.jnu.encoding = GBK java.library.path = C:\Program Files\Java\Java1.8.1\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:\Program Files (x86)\Common Files\Oracle\Java\javapath;F:\oracleExe\app\oracle\product\11.2.0\server\bin;C:\Program Files (x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS Client\;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\Intel\WiFi\bin\;C:\Program Files\Common Files\Intel\WirelessCommon\;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files\Java\Java1.8.1\bin;C:\Program Files\TortoiseSVN\bin;F:\APP;F:\Git\Git\cmd;C:\Program Files\Redis\;F:\NvmFolder\nvm;F:\NvmFolder\nodejs;C:\Program Files\Intel\WiFi\bin\;C:\Program Files\Common Files\Intel\WirelessCommon\;F:\Microsoft VS Code\Microsoft VS Code\bin;F:\Idea\IntelliJ IDEA 2017.1.1\plugins\maven\lib\maven3\bin;C:\Program Files\gradle\gradle-4.6\bin;F:\NvmFolder\nvm;F:\NvmFolder\nodejs;C:\Users\zero\AppData\Local\BypassRuntm;F:\NvmFolder\nvm;F:\NvmFolder\nodejs;F:\JetBrains\IntelliJ IDEA 2019.2.1\plugins\maven\lib\maven3\bin;. 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\zero user.timezone = Asia/Shanghai java.awt.printerjob = sun.awt.windows.WPrinterJob file.encoding = UTF-8 java.specification.version = 1.8 user.name = zero java.class.path = C:\Program Files\Java\Java1.8.1\jre\lib\charsets.jar;C:\Program Files\Java\Java1.8.1\jre\lib\deploy.jar;C:\Program Files\Java\Java1.8.1\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\Java1.8.1\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\Java1.8.1\jre\lib\ext\dnsns.jar;C:\Program Files\Java\Java1.8.1\jre\lib\ext\jaccess.jar;C:\Program Files\Java\Java1.8.1\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\Java1.8.1\jre\lib\ext\localedata.jar;C:\Program Files\Java\Java1.8.1\jre\lib\ext\nashorn.jar;C:\Program Files\Java\Java1.8.1\jre\lib\ext\sunec.jar;C:\Program Files\Java\Java1.8.1\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\Java1.8.1\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\Java1.8.1\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\Java1.8.1\jre\lib\ext\zipfs.jar;C:\Program Files\Java\Java1.8.1\jre\lib\javaws.jar;C:\Program Files\Java\Java1.8.1\jre\lib\jce.jar;C:\Program Files\Java\Java1.8.1\jre\lib\jfr.jar;C:\Program Files\Java\Java1.8.1\jre\lib\jfxswt.jar;C:\Program Files\Java\Java1.8.1\jre\lib\jsse.jar;C:\Program Files\Java\Java1.8.1\jre\lib\management-agent.jar;C:\Program Files\Java\Java1.8.1\jre\lib\plugin.jar;C:\Program Files\Java\Java1.8.1\jre\lib\resources.jar;C:\Program Files\Java\Java1.8.1\jre\lib\rt.jar;F:\Jclasslib\jclasslib\jclasslib\bin\jclasslib.jar;F:\GitCode\zero\TestExcel\target\classes;F:\workSpace\Maven\repository\org\springframework\boot\spring-boot-starter-web\2.2.6.RELEASE\spring-boot-starter-web-2.2.6.RELEASE.jar;F:\workSpace\Maven\repository\org\springframework\boot\spring-boot-starter\2.2.6.RELEASE\spring-boot-starter-2.2.6.RELEASE.jar;F:\workSpace\Maven\repository\org\springframework\boot\spring-boot\2.2.6.RELEASE\spring-boot-2.2.6.RELEASE.jar;F:\workSpace\Maven\repository\org\springframework\boot\spring-boot-autoconfigure\2.2.6.RELEASE\spring-boot-autoconfigure-2.2.6.RELEASE.jar;F:\workSpace\Maven\repository\org\springframework\boot\spring-boot-starter-logging\2.2.6.RELEASE\spring-boot-starter-logging-2.2.6.RELEASE.jar;F:\workSpace\Maven\repository\ch\qos\logback\logback-classic\1.2.3\logback-classic-1.2.3.jar;F:\workSpace\Maven\repository\ch\qos\logback\logback-core\1.2.3\logback-core-1.2.3.jar;F:\workSpace\Maven\repository\org\slf4j\slf4j-api\1.7.30\slf4j-api-1.7.30.jar;F:\workSpace\Maven\repository\org\apache\logging\log4j\log4j-to-slf4j\2.12.1\log4j-to-slf4j-2.12.1.jar;F:\workSpace\Maven\repository\org\apache\logging\log4j\log4j-api\2.12.1\log4j-api-2.12.1.jar;F:\workSpace\Maven\repository\org\slf4j\jul-to-slf4j\1.7.30\jul-to-slf4j-1.7.30.jar;F:\workSpace\Maven\repository\jakarta\annotation\jakarta.annotation-api\1.3.5\jakarta.annotation-api-1.3.5.jar;F:\workSpace\Maven\repository\org\springframework\spring-core\5.2.5.RELEASE\spring-core-5.2.5.RELEASE.jar;F:\workSpace\Maven\repository\org\springframework\spring-jcl\5.2.5.RELEASE\spring-jcl-5.2.5.RELEASE.jar;F:\workSpace\Maven\repository\org\yaml\snakeyaml\1.25\snakeyaml-1.25.jar;F:\workSpace\Maven\repository\org\springframework\boot\spring-boot-starter-json\2.2.6.RELEASE\spring-boot-starter-json-2.2.6.RELEASE.jar;F:\workSpace\Maven\repository\com\fasterxml\jackson\core\jackson-databind\2.10.3\jackson-databind-2.10.3.jar;F:\workSpace\Maven\repository\com\fasterxml\jackson\core\jackson-annotations\2.10.3\jackson-annotations-2.10.3.jar;F:\workSpace\Maven\repository\com\fasterxml\jackson\core\jackson-core\2.10.3\jackson-core-2.10.3.jar;F:\workSpace\Maven\repository\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.10.3\jackson-datatype-jdk8-2.10.3.jar;F:\workSpace\Maven\repository\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.10.3\jackson-datatype-jsr310-2.10.3.jar;F:\workSpace\Maven\repository\com\fasterxml\jackson\module\jackson-module-parameter-names\2.10.3\jackson-module-parameter-names-2.10.3.jar;F:\workSpace\Maven\repository\org\springframework\boot\spring-boot-starter-tomcat\2.2.6.RELEASE\spring-boot-starter-tomcat-2.2.6.RELEASE.jar;F:\workSpace\Maven\repository\org\apache\tomcat\embed\tomcat-embed-core\9.0.33\tomcat-embed-core-9.0.33.jar;F:\workSpace\Maven\repository\org\apache\tomcat\embed\tomcat-embed-el\9.0.33\tomcat-embed-el-9.0.33.jar;F:\workSpace\Maven\repository\org\apache\tomcat\embed\tomcat-embed-websocket\9.0.33\tomcat-embed-websocket-9.0.33.jar;F:\workSpace\Maven\repository\org\springframework\boot\spring-boot-starter-validation\2.2.6.RELEASE\spring-boot-starter-validation-2.2.6.RELEASE.jar;F:\workSpace\Maven\repository\jakarta\validation\jakarta.validation-api\2.0.2\jakarta.validation-api-2.0.2.jar;F:\workSpace\Maven\repository\org\hibernate\validator\hibernate-validator\6.0.18.Final\hibernate-validator-6.0.18.Final.jar;F:\workSpace\Maven\repository\org\jboss\logging\jboss-logging\3.4.1.Final\jboss-logging-3.4.1.Final.jar;F:\workSpace\Maven\repository\com\fasterxml\classmate\1.5.1\classmate-1.5.1.jar;F:\workSpace\Maven\repository\org\springframework\spring-web\5.2.5.RELEASE\spring-web-5.2.5.RELEASE.jar;F:\workSpace\Maven\repository\org\springframework\spring-beans\5.2.5.RELEASE\spring-beans-5.2.5.RELEASE.jar;F:\workSpace\Maven\repository\org\springframework\spring-webmvc\5.2.5.RELEASE\spring-webmvc-5.2.5.RELEASE.jar;F:\workSpace\Maven\repository\org\springframework\spring-aop\5.2.5.RELEASE\spring-aop-5.2.5.RELEASE.jar;F:\workSpace\Maven\repository\org\springframework\spring-context\5.2.5.RELEASE\spring-context-5.2.5.RELEASE.jar;F:\workSpace\Maven\repository\org\springframework\spring-expression\5.2.5.RELEASE\spring-expression-5.2.5.RELEASE.jar;F:\workSpace\Maven\repository\org\apache\poi\poi-ooxml\3.10-FINAL\poi-ooxml-3.10-FINAL.jar;F:\workSpace\Maven\repository\org\apache\poi\poi\3.10-FINAL\poi-3.10-FINAL.jar;F:\workSpace\Maven\repository\commons-codec\commons-codec\1.13\commons-codec-1.13.jar;F:\workSpace\Maven\repository\dom4j\dom4j\1.6.1\dom4j-1.6.1.jar;F:\workSpace\Maven\repository\xml-apis\xml-apis\1.0.b2\xml-apis-1.0.b2.jar;F:\workSpace\Maven\repository\org\apache\poi\poi-ooxml-schemas\3.10-FINAL\poi-ooxml-schemas-3.10-FINAL.jar;F:\workSpace\Maven\repository\org\apache\xmlbeans\xmlbeans\2.3.0\xmlbeans-2.3.0.jar;F:\workSpace\Maven\repository\stax\stax-api\1.0.1\stax-api-1.0.1.jar;F:\workSpace\Maven\repository\com\alibaba\fastjson\1.2.53\fastjson-1.2.53.jar;F:\workSpace\Maven\repository\com\rabbitmq\amqp-client\3.4.1\amqp-client-3.4.1.jar;F:\workSpace\Maven\repository\org\json\json\20140107\json-20140107.jar;F:\workSpace\Maven\repository\junit\junit\4.12\junit-4.12.jar;F:\workSpace\Maven\repository\org\hamcrest\hamcrest-core\2.1\hamcrest-core-2.1.jar;F:\workSpace\Maven\repository\org\hamcrest\hamcrest\2.1\hamcrest-2.1.jar;F:\workSpace\Maven\repository\io\netty\netty-all\4.1.20.Final\netty-all-4.1.20.Final.jar;F:\workSpace\Maven\repository\org\msgpack\msgpack\0.6.12\msgpack-0.6.12.jar;F:\workSpace\Maven\repository\com\googlecode\json-simple\json-simple\1.1.1\json-simple-1.1.1.jar;F:\workSpace\Maven\repository\org\javassist\javassist\3.18.1-GA\javassist-3.18.1-GA.jar;F:\JetBrains\IntelliJ IDEA 2019.2.1\lib\idea_rt.jar java.vm.specification.version = 1.8 sun.arch.data.model = 64 sun.java.command = com.example.offer.leecode.t20201015.CanJump java.home = C:\Program Files\Java\Java1.8.1\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_102 java.ext.dirs = C:\Program Files\Java\Java1.8.1\jre\lib\ext;C:\Windows\Sun\Java\lib\ext sun.boot.class.path = C:\Program Files\Java\Java1.8.1\jre\lib\resources.jar;C:\Program Files\Java\Java1.8.1\jre\lib\rt.jar;C:\Program Files\Java\Java1.8.1\jre\lib\sunrsasign.jar;C:\Program Files\Java\Java1.8.1\jre\lib\jsse.jar;C:\Program Files\Java\Java1.8.1\jre\lib\jce.jar;C:\Program Files\Java\Java1.8.1\jre\lib\charsets.jar;C:\Program Files\Java\Java1.8.1\jre\lib\jfr.jar;C:\Program Files\Java\Java1.8.1\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 VM Flags: Non-default VM flags: -XX:CICompilerCount=4 -XX:InitialHeapSize=268435456 -XX:MaxHeapSize=4273995776 -XX:MaxNewSize=1424490496 -XX:MinHeapDeltaBytes=524288 -XX:NewSize=89128960 -XX:OldSize=179306496 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseFastUnorderedTimeStamps -XX:-UseLargePagesIndividualAllocation -XX:+UseParallelGC Command line: -javaagent:F:\JetBrains\IntelliJ IDEA 2019.2.1\lib\idea_rt.jar=55312:F:\JetBrains\IntelliJ IDEA 2019.2.1\bin -Dfile.encoding=UTF-8 C:\Users\zero>
jinfo -flag name pid
查看指定JVM參數(shù)的值
C:\Users\zero>jinfo -flag InitialHeapSize 6880 -XX:InitialHeapSize=268435456
jinfo -flag [+|-]name pid
動態(tài)修改JVM參數(shù)的值
C:\Users\zero>jinfo -flag +PrintGC 8932 C:\Users\zero>jinfo -flag PrintGC 8932 -XX:+PrintGC C:\Users\zero>jinfo -flag -PrintGC 8932 C:\Users\zero>jinfo -flag PrintGC 8932 -XX:-PrintGC C:\Users\zero>
jmap:JAVA內(nèi)存映像工具
jmap用于生成堆轉儲快照(heapdump或dump文件)
生成dump文件的方法,設置虛擬機參數(shù),讓虛擬機在OOM異常后自動生成dump文件,或者kill -3 dip,或者使用jmap獲取,但是使用jmap命令會造成服務器停用,影響可能會很嚴重
#出現(xiàn) OOME 時生成堆 dump: -XX:+HeapDumpOnOutOfMemoryError #生成堆文件地址: -XX:HeapDumpPath=/home/liuke/jvmlogs/
常用選項
選項 | 作用 |
---|---|
-dump | 生成JAVA堆轉儲快照 |
-heap | 顯示JAVA堆詳細信息 |
使用jmap生成dump文件
C:\Users\zero>jmap -dump:format=b,file=work 5892 Dumping heap to C:\Users\zero\work ... Heap dump file created
危險操作
最主要的危險操作是下面這三種:
- jmap -dump
這個命令執(zhí)行,JVM會將整個heap的信息dump寫入到一個文件,heap如果比較大的話,就會導致這個過程比較耗時,并且執(zhí)行的過程中為了保證dump的信息是可靠的,所以會暫停應用。 - jmap -permstat
這個命令執(zhí)行,JVM會去統(tǒng)計perm區(qū)的狀況,這整個過程也會比較的耗時,并且同樣也會暫停應用。 - jmap -histo:live
這個命令執(zhí)行,JVM會先觸發(fā)gc,然后再統(tǒng)計信息。
jstack:JAVA堆棧跟蹤工具
jstack命令用于生成虛擬機當前時刻的線程快照(threaddump或者javacore文件)
常用選項
選項 | 作用 |
---|---|
-l | 除堆棧外,顯示有關鎖的附加信息 |
-m | 調(diào)用本地方法的話,可以顯示C/C++的堆棧 |
使用jstack查看線程堆棧
C:\Users\zero>jstack 14024 2020-10-21 22:06:55 Full thread dump Java HotSpot(TM) 64-Bit Server VM (25.102-b14 mixed mode): "Service Thread" #11 daemon prio=9 os_prio=0 tid=0x000000001f982800 nid=0x3c2c runnable [0x0000000000000000] java.lang.Thread.State: RUNNABLE "C1 CompilerThread3" #10 daemon prio=9 os_prio=2 tid=0x000000001f0e9800 nid=0x604 waiting on condition [0x0000000000000000] java.lang.Thread.State: RUNNABLE "C2 CompilerThread2" #9 daemon prio=9 os_prio=2 tid=0x000000001f0e4800 nid=0x3b24 waiting on condition [0x0000000000000000] java.lang.Thread.State: RUNNABLE "C2 CompilerThread1" #8 daemon prio=9 os_prio=2 tid=0x000000001f0e4000 nid=0x32fc waiting on condition [0x0000000000000000] java.lang.Thread.State: RUNNABLE "C2 CompilerThread0" #7 daemon prio=9 os_prio=2 tid=0x000000001f0dd000 nid=0x428 waiting on condition [0x0000000000000000] java.lang.Thread.State: RUNNABLE "Monitor Ctrl-Break" #6 daemon prio=5 os_prio=0 tid=0x000000001f081000 nid=0x2c08 runnable [0x000000001f55e000] java.lang.Thread.State: RUNNABLE at java.net.SocketInputStream.socketRead0(Native Method) at java.net.SocketInputStream.socketRead(SocketInputStream.java:116) at java.net.SocketInputStream.read(SocketInputStream.java:170) at java.net.SocketInputStream.read(SocketInputStream.java:141) at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:284) at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:326) at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178) - locked <0x000000076b44f888> (a java.io.InputStreamReader) at java.io.InputStreamReader.read(InputStreamReader.java:184) at java.io.BufferedReader.fill(BufferedReader.java:161) at java.io.BufferedReader.readLine(BufferedReader.java:324) - locked <0x000000076b44f888> (a java.io.InputStreamReader) at java.io.BufferedReader.readLine(BufferedReader.java:389) at com.intellij.rt.execution.application.AppMainV2$1.run(AppMainV2.java:64) "Attach Listener" #5 daemon prio=5 os_prio=2 tid=0x000000001edf1800 nid=0x10c4 waiting on condition [0x0000000000000000] java.lang.Thread.State: RUNNABLE "Signal Dispatcher" #4 daemon prio=9 os_prio=2 tid=0x000000001ed9d000 nid=0x1d14 runnable [0x0000000000000000] java.lang.Thread.State: RUNNABLE "Finalizer" #3 daemon prio=8 os_prio=1 tid=0x000000001ed80800 nid=0x3c38 in Object.wait() [0x000000001f25f000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <0x000000076b188e98> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:143) - locked <0x000000076b188e98> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:164) at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:209) "Reference Handler" #2 daemon prio=10 os_prio=2 tid=0x000000000340c000 nid=0x3500 in Object.wait() [0x000000001ed5f000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <0x000000076b186b40> (a java.lang.ref.Reference$Lock) at java.lang.Object.wait(Object.java:502) at java.lang.ref.Reference.tryHandlePending(Reference.java:191) - locked <0x000000076b186b40> (a java.lang.ref.Reference$Lock) at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:153) "main" #1 prio=5 os_prio=0 tid=0x0000000003314800 nid=0x3fa8 waiting on condition [0x000000000309f000] java.lang.Thread.State: TIMED_WAITING (sleeping) at java.lang.Thread.sleep(Native Method) at com.example.offer.leecode.t20201015.CanJump.main(CanJump.java:57) "VM Thread" os_prio=2 tid=0x000000001ce69800 nid=0x1f18 runnable "GC task thread#0 (ParallelGC)" os_prio=0 tid=0x000000000332a800 nid=0x2b64 runnable "GC task thread#1 (ParallelGC)" os_prio=0 tid=0x000000000332c000 nid=0x514 runnable "GC task thread#2 (ParallelGC)" os_prio=0 tid=0x000000000332e000 nid=0x19f8 runnable "GC task thread#3 (ParallelGC)" os_prio=0 tid=0x0000000003330800 nid=0x2608 runnable "GC task thread#4 (ParallelGC)" os_prio=0 tid=0x0000000003332800 nid=0x2c84 runnable "GC task thread#5 (ParallelGC)" os_prio=0 tid=0x0000000003333800 nid=0x406c runnable "GC task thread#6 (ParallelGC)" os_prio=0 tid=0x0000000003337000 nid=0x2c38 runnable "GC task thread#7 (ParallelGC)" os_prio=0 tid=0x0000000003338000 nid=0x2c54 runnable "VM Periodic Task Thread" os_prio=2 tid=0x000000001fa2c000 nid=0x21d4 waiting on condition JNI global references: 33 C:\Users\zero>jstack -l 14024 2020-10-21 22:07:00 Full thread dump Java HotSpot(TM) 64-Bit Server VM (25.102-b14 mixed mode): "Service Thread" #11 daemon prio=9 os_prio=0 tid=0x000000001f982800 nid=0x3c2c runnable [0x0000000000000000] java.lang.Thread.State: RUNNABLE Locked ownable synchronizers: - None "C1 CompilerThread3" #10 daemon prio=9 os_prio=2 tid=0x000000001f0e9800 nid=0x604 waiting on condition [0x0000000000000000] java.lang.Thread.State: RUNNABLE Locked ownable synchronizers: - None "C2 CompilerThread2" #9 daemon prio=9 os_prio=2 tid=0x000000001f0e4800 nid=0x3b24 waiting on condition [0x0000000000000000] java.lang.Thread.State: RUNNABLE Locked ownable synchronizers: - None "C2 CompilerThread1" #8 daemon prio=9 os_prio=2 tid=0x000000001f0e4000 nid=0x32fc waiting on condition [0x0000000000000000] java.lang.Thread.State: RUNNABLE Locked ownable synchronizers: - None "C2 CompilerThread0" #7 daemon prio=9 os_prio=2 tid=0x000000001f0dd000 nid=0x428 waiting on condition [0x0000000000000000] java.lang.Thread.State: RUNNABLE Locked ownable synchronizers: - None "Monitor Ctrl-Break" #6 daemon prio=5 os_prio=0 tid=0x000000001f081000 nid=0x2c08 runnable [0x000000001f55e000] java.lang.Thread.State: RUNNABLE at java.net.SocketInputStream.socketRead0(Native Method) at java.net.SocketInputStream.socketRead(SocketInputStream.java:116) at java.net.SocketInputStream.read(SocketInputStream.java:170) at java.net.SocketInputStream.read(SocketInputStream.java:141) at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:284) at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:326) at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178) - locked <0x000000076b44f888> (a java.io.InputStreamReader) at java.io.InputStreamReader.read(InputStreamReader.java:184) at java.io.BufferedReader.fill(BufferedReader.java:161) at java.io.BufferedReader.readLine(BufferedReader.java:324) - locked <0x000000076b44f888> (a java.io.InputStreamReader) at java.io.BufferedReader.readLine(BufferedReader.java:389) at com.intellij.rt.execution.application.AppMainV2$1.run(AppMainV2.java:64) Locked ownable synchronizers: - None "Attach Listener" #5 daemon prio=5 os_prio=2 tid=0x000000001edf1800 nid=0x10c4 waiting on condition [0x0000000000000000] java.lang.Thread.State: RUNNABLE Locked ownable synchronizers: - None "Signal Dispatcher" #4 daemon prio=9 os_prio=2 tid=0x000000001ed9d000 nid=0x1d14 runnable [0x0000000000000000] java.lang.Thread.State: RUNNABLE Locked ownable synchronizers: - None "Finalizer" #3 daemon prio=8 os_prio=1 tid=0x000000001ed80800 nid=0x3c38 in Object.wait() [0x000000001f25f000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <0x000000076b188e98> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:143) - locked <0x000000076b188e98> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:164) at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:209) Locked ownable synchronizers: - None "Reference Handler" #2 daemon prio=10 os_prio=2 tid=0x000000000340c000 nid=0x3500 in Object.wait() [0x000000001ed5f000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <0x000000076b186b40> (a java.lang.ref.Reference$Lock) at java.lang.Object.wait(Object.java:502) at java.lang.ref.Reference.tryHandlePending(Reference.java:191) - locked <0x000000076b186b40> (a java.lang.ref.Reference$Lock) at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:153) Locked ownable synchronizers: - None "main" #1 prio=5 os_prio=0 tid=0x0000000003314800 nid=0x3fa8 waiting on condition [0x000000000309f000] java.lang.Thread.State: TIMED_WAITING (sleeping) at java.lang.Thread.sleep(Native Method) at com.example.offer.leecode.t20201015.CanJump.main(CanJump.java:57) Locked ownable synchronizers: - None "VM Thread" os_prio=2 tid=0x000000001ce69800 nid=0x1f18 runnable "GC task thread#0 (ParallelGC)" os_prio=0 tid=0x000000000332a800 nid=0x2b64 runnable "GC task thread#1 (ParallelGC)" os_prio=0 tid=0x000000000332c000 nid=0x514 runnable "GC task thread#2 (ParallelGC)" os_prio=0 tid=0x000000000332e000 nid=0x19f8 runnable "GC task thread#3 (ParallelGC)" os_prio=0 tid=0x0000000003330800 nid=0x2608 runnable "GC task thread#4 (ParallelGC)" os_prio=0 tid=0x0000000003332800 nid=0x2c84 runnable "GC task thread#5 (ParallelGC)" os_prio=0 tid=0x0000000003333800 nid=0x406c runnable "GC task thread#6 (ParallelGC)" os_prio=0 tid=0x0000000003337000 nid=0x2c38 runnable "GC task thread#7 (ParallelGC)" os_prio=0 tid=0x0000000003338000 nid=0x2c54 runnable "VM Periodic Task Thread" os_prio=2 tid=0x000000001fa2c000 nid=0x21d4 waiting on condition JNI global references: 33 C:\Users\zero>jstack -m 14024 Attaching to process ID 14024, please wait... Debugger attached successfully. Server compiler detected. JVM version is 25.102-b14 Deadlock Detection: No deadlocks found. ----------------- 0 ----------------- 0x00007ffb6fa55154 ntdll!ZwWaitForSingleObject + 0x14 0xec8b485741564155 ???????? sun.jvm.hotspot.debugger.DebuggerException: Windbg Error: ReadVirtual failed! at sun.jvm.hotspot.debugger.windbg.WindbgDebuggerLocal.readBytesFromProcess0(Native Method) at sun.jvm.hotspot.debugger.windbg.WindbgDebuggerLocal.readBytesFromProcess(WindbgDebuggerLocal.java:490) at sun.jvm.hotspot.debugger.DebuggerBase$Fetcher.fetchPage(DebuggerBase.java:80) at sun.jvm.hotspot.debugger.PageCache.getPage(PageCache.java:178) at sun.jvm.hotspot.debugger.PageCache.getLong(PageCache.java:100) at sun.jvm.hotspot.debugger.DebuggerBase.readCInteger(DebuggerBase.java:364) at sun.jvm.hotspot.debugger.DebuggerBase.readAddressValue(DebuggerBase.java:462) at sun.jvm.hotspot.debugger.windbg.WindbgDebuggerLocal.readAddress(WindbgDebuggerLocal.java:316) at sun.jvm.hotspot.debugger.windbg.WindbgAddress.getAddressAt(WindbgAddress.java:72) at sun.jvm.hotspot.debugger.windows.amd64.WindowsAMD64CFrame.sender(WindowsAMD64CFrame.java:60) at sun.jvm.hotspot.tools.PStack.run(PStack.java:161) at sun.jvm.hotspot.tools.PStack.run(PStack.java:58) at sun.jvm.hotspot.tools.PStack.run(PStack.java:53) at sun.jvm.hotspot.tools.JStack.run(JStack.java:66) at sun.jvm.hotspot.tools.Tool.startInternal(Tool.java:260) at sun.jvm.hotspot.tools.Tool.start(Tool.java:223) at sun.jvm.hotspot.tools.Tool.execute(Tool.java:118) at sun.jvm.hotspot.tools.JStack.main(JStack.java:92) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at sun.tools.jstack.JStack.runJStackTool(JStack.java:140) at sun.tools.jstack.JStack.main(JStack.java:106) ----------------- 1 ----------------- ----------------- 2 ----------------- ----------------- 3 ----------------- 0x00007ffb6fa55c24 ntdll!NtWaitForMultipleObjects + 0x14 ----------------- 4 ----------------- ----------------- 5 ----------------- ----------------- 6 ----------------- ----------------- 7 ----------------- ----------------- 8 ----------------- ----------------- 9 ----------------- ----------------- 10 ----------------- ----------------- 11 ----------------- ----------------- 12 ----------------- 0x00007ffb6fa55154 ntdll!ZwWaitForSingleObject + 0x14 ----------------- 13 ----------------- 0x00007ffb6fa55154 ntdll!ZwWaitForSingleObject + 0x14 ----------------- 14 ----------------- 0x00007ffb6fa55154 ntdll!ZwWaitForSingleObject + 0x14 ----------------- 15 ----------------- 0x00007ffb6fa55154 ntdll!ZwWaitForSingleObject + 0x14 ----------------- 16 ----------------- 0x00007ffb6fa55154 ntdll!ZwWaitForSingleObject + 0x14 ----------------- 17 ----------------- 0x00007ffb6fa55154 ntdll!ZwWaitForSingleObject + 0x14 ----------------- 18 ----------------- 0x00007ffb6fa55154 ntdll!ZwWaitForSingleObject + 0x14 ----------------- 19 ----------------- 0x00007ffb6fa55154 ntdll!ZwWaitForSingleObject + 0x14 ----------------- 20 ----------------- 0x00007ffb6fa55154 ntdll!ZwWaitForSingleObject + 0x14 ----------------- 21 ----------------- 0x00007ffb6fa55154 ntdll!ZwWaitForSingleObject + 0x14 ----------------- 22 ----------------- ----------------- 23 ----------------- 0x00007ffb6fa55154 ntdll!ZwWaitForSingleObject + 0x14
以上就是JVM虛擬機性能監(jiān)控與故障處理工具介紹的詳細內(nèi)容,更多關于JVM 性能監(jiān)控故障處理工具的資料請關注腳本之家其它相關文章!
相關文章
MyBatis Generator配置生成接口和XML映射文件的實現(xiàn)
本文介紹了配置MBG以生成Mapper接口和XML映射文件,過合理使用MBG和自定義生成策略,可以有效解決生成的Example類可能帶來的問題,使代碼更加簡潔和易于維護2025-02-02SpringBoot接口返回數(shù)據(jù)脫敏(Mybatis、Jackson)
有時候,我們接口返回的數(shù)據(jù)需要做一些處理,有一些敏感數(shù)據(jù),本文主要介紹了SpringBoot接口返回數(shù)據(jù)脫敏(Mybatis、Jackson),具有一定的參考價值,感興趣的可以了解一下2024-07-07SpringBoot 利用MultipartFile上傳本地圖片生成圖片鏈接的實現(xiàn)方法
這篇文章主要介紹了SpringBoot 利用MultipartFile上傳本地圖片生成圖片鏈接的實現(xiàn)方法,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-03-03