国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

JVM 性能監(jiān)控與故障處理工具

這篇具有很好參考價(jià)值的文章主要介紹了JVM 性能監(jiān)控與故障處理工具。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

基礎(chǔ)工具

jps:虛擬機(jī)進(jìn)程狀態(tài)工具

jps 命令格式:jps [options] [hostid]

命令可選項(xiàng)解釋:

選項(xiàng) 解釋
-q 只輸出 LVMID,省略主類的名稱
-m 輸出傳給 main 函數(shù)的參數(shù)
-l 輸出主類的全名,如果進(jìn)程運(yùn)行的 JAR 包,則輸出 JAR 包的路徑
-v 輸出虛擬機(jī)進(jìn)程啟動(dòng)時(shí)的 JVM 參數(shù)
jstat:虛擬機(jī)統(tǒng)計(jì)信息監(jiān)視工具

jstat(JVM Statistics Monitoring Tool)是用于監(jiān)視虛擬機(jī)各種運(yùn)行狀態(tài)信息的命令行工具,在沒有 GUI 圖像界面、只提供了純文本控制臺(tái)環(huán)境的服務(wù)器上,它將是運(yùn)行期定位虛擬機(jī)性能問題的常用工具。

它既可以連接本地虛擬機(jī)也可以連接遠(yuǎn)程虛擬機(jī),如果連接遠(yuǎn)程虛擬機(jī),那 VMID 的格式應(yīng)當(dāng)是:[protocol:][//]lvmid[@hostname[:port]/servername]

jstat 命令格式:jstat [option vmid [interval[s|ms] [count]]]

參數(shù) interval 和 count 代表查詢間隔和次數(shù),如果省略這兩個(gè)參數(shù),說明只查詢一次;下面的命令查詢 vmid 為 2764 的 JVM 進(jìn)程,且每 250 毫秒查詢一次,一共查詢 20 次。

$ jstat -gc 2764 250 20

可選項(xiàng)參數(shù)如下:

可選項(xiàng) 作用
-class 監(jiān)視類加載、卸載數(shù)量、總空間以及類加載所耗費(fèi)的時(shí)間
-gc 監(jiān)視 Java 堆狀況,包括 Eden 區(qū)、2 個(gè) Survivor 區(qū)、老年代、永久代等的容量,已用空間,垃圾收集時(shí)間合計(jì)等信息
-gccapacity 監(jiān)視內(nèi)容與 -gc 基本相同,但輸出主要關(guān)注 Java 堆各個(gè)區(qū)域使用到的最大、最小空間
-gcutil 監(jiān)視內(nèi)容與 -gc 基本相同,但輸出主要關(guān)注已使用空間占總空間的百分比
-gccause 與 -gcutil 功能一樣,但是會(huì)額外輸出導(dǎo)致上一次垃圾收集產(chǎn)生的原因
-gcnew 監(jiān)視新生代垃圾收集狀況
-gcnewcapacity 監(jiān)視內(nèi)容與 -gcnew 基本相同,輸出主要關(guān)注使用到的最大、最小空間
-gcold 監(jiān)視老年代垃圾收集狀況
-gcoldcapacity 監(jiān)視內(nèi)容與 -gcold 基本相同,輸出主要關(guān)注使用到的最大、最小空間
-gcpermcapacity 輸出永久代使用到的最大、最小空間
-compiler 輸出即時(shí)編譯器編譯過的方法、耗時(shí)等信息
-printcompilation 輸出已經(jīng)被即時(shí)編譯的方法

示例如下:

本地啟動(dòng)一個(gè) Tomcat 服務(wù),然后用 jps 命令獲取 vmid 為 17260。

$ jps -l
11232 org.jetbrains.idea.maven.server.RemoteMavenServer36
5940 org.jetbrains.jps.cmdline.Launcher
15784
16828 org.jetbrains.jps.cmdline.Launcher
17260 org.apache.catalina.startup.Bootstrap
5244 sun.tools.jps.Jps

使用 jstat 命令查看 JVM 內(nèi)存使用情況和 gc 的統(tǒng)計(jì)信息。
JVM 性能監(jiān)控與故障處理工具,jvm
輸出列對(duì)應(yīng)的含義如下:

列名 描述
S0C 年輕代中第一個(gè) survivor 區(qū)的容量(字節(jié))
S1C 年輕代中第二個(gè) survivor 區(qū)的容量(字節(jié))
S0U 年輕代中第一個(gè) survivor 區(qū)目前已使用的容量(字節(jié))
S1U 年輕代中第二個(gè) survivor 區(qū)目前已使用的容量(字節(jié))
EC 年輕代中 Eden 的容量(字節(jié))
EU 年輕代中 Eden 目前已使用的容量(字節(jié))
OC 老年代的容量(字節(jié))
OU 老年代目前已使用的容量(字節(jié))
MC 方法區(qū)大?。ㄗ止?jié))
MU 方法區(qū)目前已使用的容量(字節(jié))
CCSC 壓縮類空間大小(字節(jié))
CCSU 壓縮類空間已使用大?。ㄗ止?jié))
YGC 從應(yīng)用程序啟動(dòng)到采樣時(shí)年輕代中 minor gc 次數(shù)
YGCT 從應(yīng)用程序啟動(dòng)到采樣時(shí)年輕代中 minor gc 所用時(shí)間(s)
FGC 從應(yīng)用程序啟動(dòng)到采樣時(shí) Full gc 的次數(shù)
FGCT 從應(yīng)用程序啟動(dòng)到采樣時(shí) Full gc 所用時(shí)間(s)
GCT 從應(yīng)用程序啟動(dòng)到采樣時(shí) gc 用的總時(shí)間(s)

jstat 命令展示的信息可知,啟動(dòng) Tomcat 后進(jìn)行了 3 次

jinfo:Java 配置信息工具

jinfo(Configuration Info for Java)的作用是實(shí)時(shí)查看和調(diào)整虛擬機(jī)各項(xiàng)參數(shù)。我們知道 JVM 在啟動(dòng)的時(shí)候有非常多的配置參數(shù),比如堆大小、垃圾收集器等,在沒有顯示指定的情況下,這些參數(shù)有默認(rèn)值,當(dāng)我們向查看這個(gè)默認(rèn)值是多少的時(shí)候,就可以使用 jinfo 命令,jinfo 命令還支持動(dòng)態(tài)修改部分 JVM 參數(shù)。

jinfo 命令使用說明如下:
JVM 性能監(jiān)控與故障處理工具,jvm
jinfo 命令可選項(xiàng)的含義:

可選項(xiàng) 含義
-flag <name>/-flag [+|-]<name> 打印指定 JVM 參數(shù)的值,也可以啟用/禁用指定的 JVM 參數(shù)
-flags 打印 JVM 參數(shù)
-sysprops 打印 Java 系統(tǒng)屬性

其中 pid 就是通過 jps 查詢到的 vmid,兩個(gè)的值是一樣的。

# 打印 VM 參數(shù)
$ jinfo -flags 17260
Attaching to process ID 17260, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.311-b11
Non-default VM flags: -XX:CICompilerCount=12 -XX:InitialHeapSize=232783872 -XX:+ManagementServer -XX:MaxHeapSize=3722444800 -XX:MaxNewSize=1240465408 -XX:MinHeapDeltaBytes=524288 -XX:NewSize=77594624 -XX:OldSize=155189248 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseFastUnorderedTimeStamps -XX:-UseLargePagesIndividualAllocation -XX:+UseParallelGC
Command line:  -Djava.util.logging.config.file=C:\Users\animal\AppData\Local\JetBrains\IntelliJIdea2020.1\tomcat\Unnamed_servlet-webapp_2\conf\logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:53422,suspend=y,server=n -javaagent:C:\Users\animal\AppData\Local\JetBrains\IntelliJIdea2020.1\captureAgent\debugger-agent.jar -Dcom.sun.management.jmxremote= -Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.password.file=C:\Users\animal\AppData\Local\JetBrains\IntelliJIdea2020.1\tomcat\Unnamed_servlet-webapp_2\jmxremote.password -Dcom.sun.management.jmxremote.access.file=C:\Users\animal\AppData\Local\JetBrains\IntelliJIdea2020.1\tomcat\Unnamed_servlet-webapp_2\jmxremote.access -Djava.rmi.server.hostname=127.0.0.1 -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dignore.endorsed.dirs= -Dcatalina.base=C:\Users\animal\AppData\Local\JetBrains\IntelliJIdea2020.1\tomcat\Unnamed_servlet-webapp_2 -Dcatalina.home=D:\IT\tomcat\apache-tomcat-8.5.78-windows-x64\apache-tomcat-8.5.78 -Djava.io.tmpdir=D:\IT\tomcat\apache-tomcat-8.5.78-windows-x64\apache-tomcat-8.5.78\temp

# 查看最大堆內(nèi)存參數(shù)的值
$ jinfo -flag MaxHeapSize 17260
-XX:MaxHeapSize=3722444800
jmap:Java 內(nèi)存映像工具

jmap(Memory Map for Java)命令用于生成堆轉(zhuǎn)儲(chǔ)快照,除了 jmap 命令,還可以使用 -XX:HeapDumpOnOutOfMemoryError 參數(shù)讓虛擬機(jī)在內(nèi)存溢出異常出現(xiàn)之后自動(dòng)生成堆轉(zhuǎn)儲(chǔ)快照文件。

jmap 命令的使用說明如下:
JVM 性能監(jiān)控與故障處理工具,jvm
jmap 命令可選項(xiàng)的含義如下:

可選項(xiàng) 含義
-heap 打印 Java 堆詳細(xì)信息,如使用哪種收集器、JVM 參數(shù)、分代狀況等
-dump:<dump-options> 生成 Java 堆轉(zhuǎn)儲(chǔ)快照,dump-options 參數(shù)有 live:只 dump 存活的對(duì)象,如果沒有指定,則 dump 出堆中的所有對(duì)象;format=b:二進(jìn)制格式;file=<file>:dump 到指定文件,示例:jmap -dump:live,format=b,file=heap.bin <pid>
-F 當(dāng)虛擬機(jī)進(jìn)程對(duì) -dump 選項(xiàng)沒有響應(yīng)時(shí),可使用這個(gè)選項(xiàng)強(qiáng)制生成 dump 快照,在這種模式下不支持 “l(fā)ive” 子選項(xiàng)

下面實(shí)戰(zhàn)演示一下:

# 該選項(xiàng)的輸出類似于 jinfo 命令,但是多了堆配置參數(shù)和垃圾收集器
$ jmap -heap 17260
Attaching to process ID 17260, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.311-b11

using thread-local object allocation.
Parallel GC with 13 thread(s)

Heap Configuration:
   MinHeapFreeRatio         = 0
   MaxHeapFreeRatio         = 100
   MaxHeapSize              = 3722444800 (3550.0MB)
   NewSize                  = 77594624 (74.0MB)
   MaxNewSize               = 1240465408 (1183.0MB)
   OldSize                  = 155189248 (148.0MB)
   NewRatio                 = 2
   SurvivorRatio            = 8
   MetaspaceSize            = 21807104 (20.796875MB)
   CompressedClassSpaceSize = 1073741824 (1024.0MB)
   MaxMetaspaceSize         = 17592186044415 MB
   G1HeapRegionSize         = 0 (0.0MB)

Heap Usage:
PS Young Generation
Eden Space:
   capacity = 58720256 (56.0MB)
   used     = 58026680 (55.33855438232422MB)
   free     = 693576 (0.6614456176757812MB)
   98.81884711129325% used
From Space:
   capacity = 9437184 (9.0MB)
   used     = 0 (0.0MB)
   free     = 9437184 (9.0MB)
   0.0% used
To Space:
   capacity = 9437184 (9.0MB)
   used     = 0 (0.0MB)
   free     = 9437184 (9.0MB)
   0.0% used
PS Old Generation
   capacity = 109576192 (104.5MB)
   used     = 15419240 (14.704933166503906MB)
   free     = 94156952 (89.7950668334961MB)
   14.071706379429575% used

17183 interned Strings occupying 1607936 bytes.

# 生成堆轉(zhuǎn)儲(chǔ)快照文件
$ jmap -dump:file=heap.bin 17260
Dumping heap to D:\IT\heap.bin ...
Heap dump file created

執(zhí)行 jmap -dump:file=heap.bin 17260 命令之后,可以看到在當(dāng)前目錄下生成了名為 heap.bin 的文件,它是一個(gè)二進(jìn)制文件,用文本格式打開會(huì)顯示亂碼。

jhat:虛擬機(jī)堆轉(zhuǎn)儲(chǔ)快照分析工具

不管你是通過 -XX:HeapDumpOnOutOfMemoryError 參數(shù)還是通過 jmap 得到的堆轉(zhuǎn)儲(chǔ)快照文件,由于它是一個(gè)二進(jìn)制文件,所以要分析它必須要另外的工具,jhat 就是用來分析堆轉(zhuǎn)儲(chǔ)快照的命令行工具。

jhat 內(nèi)置了一個(gè)微型的 HTTP/Web 服務(wù)器,生成堆轉(zhuǎn)儲(chǔ)快照的分析結(jié)果后,可以在瀏覽器中查看。因?yàn)榉治龆艳D(zhuǎn)儲(chǔ)快照是一個(gè)耗時(shí)且耗費(fèi)硬件資源的過程,因此不要再部署應(yīng)用程序的服務(wù)器上直接分析堆轉(zhuǎn)儲(chǔ)快照文件,而是將其復(fù)制到其他服務(wù)器上再進(jìn)行分析。

jhat 命令的使用說明如下:

JVM 性能監(jiān)控與故障處理工具,jvm

使用 jhat 命令來分析之前用 jmap 得到的堆轉(zhuǎn)儲(chǔ)快照文件 heap.bin 文件。

$ jhat heap.bin
Reading from heap.bin...
Dump file created Wed Oct 04 12:09:18 CST 2023
Snapshot read, resolving...
Resolving 208424 objects...
Chasing references, expect 41 dots.........................................
Eliminating duplicate references.........................................
Snapshot resolved.
Started HTTP server on port 7000
Server is ready.

看到上面的輸出結(jié)果說明分析成功,因?yàn)槟J(rèn)端口號(hào)是 7000(這一點(diǎn)也可以從 jhat 命令的輸出中看出來),所以我們?cè)跒g覽器中鍵入 http://127.0.0.1:7000 查看分析結(jié)果。頁(yè)面如下:
JVM 性能監(jiān)控與故障處理工具,jvm
分析結(jié)果默認(rèn)以包為單位進(jìn)行分組顯示,分析內(nèi)存泄露問題主要會(huì)使用到其中的 “Heap Histogram”(與 jmap -hsito 功能一樣)與 OQL 頁(yè)簽的功能,前者可以找到內(nèi)存中總?cè)萘孔畲蟮膶?duì)象,后者是標(biāo)準(zhǔn)的對(duì)象查詢語言,使用類似 SQL 的語法對(duì)內(nèi)存中的對(duì)象進(jìn)行查詢統(tǒng)計(jì)。

jstack:Java 堆棧跟蹤工具

jstack(Stack Trace for Java)命令用于生成虛擬機(jī)當(dāng)前時(shí)刻的線程快照(一般稱為 threaddump 或者 javacore 文件)。線程快照就是當(dāng)前虛擬機(jī)內(nèi)每一條線程正在執(zhí)行的方法堆棧的集合,生成線程快照的目的通常是定位線程出現(xiàn)長(zhǎng)時(shí)間停頓的原因,如線程間死鎖、死循環(huán)、請(qǐng)求外部資源導(dǎo)致的長(zhǎng)時(shí)間掛起等,都是導(dǎo)致線程長(zhǎng)時(shí)間停頓的常見原因。線程出現(xiàn)停頓時(shí)通過 jstack 來查看各個(gè)線程的調(diào)用堆棧,就可以獲知沒有響應(yīng)的線程到底在后臺(tái)做些什么事情,或者等待著什么資源。

jstack 命令的使用說明:

JVM 性能監(jiān)控與故障處理工具,jvm
可選項(xiàng)的含義:

可選項(xiàng) 含義
-F 當(dāng)正常輸出的請(qǐng)求不被響應(yīng)時(shí),強(qiáng)制輸出線程堆棧
-l 除堆棧信息外,顯示關(guān)于鎖的附加信息
-m 打印調(diào)用本地方法的堆棧信息
# jstack 會(huì)打印所有線程的堆棧信息,這里只展示了前三個(gè)線程
$ jstack -l 17260
2023-10-04 12:45:48
Full thread dump Java HotSpot(TM) 64-Bit Server VM (25.311-b11 mixed mode):

"http-nio-8080-AsyncTimeout" #47 daemon prio=5 os_prio=0 tid=0x00000111f42bc000 nid=0xa20 waiting on condition [0x0000000159efe000]
   java.lang.Thread.State: TIMED_WAITING (sleeping)
        at java.lang.Thread.sleep(Native Method)
        at org.apache.coyote.AbstractProtocol$AsyncTimeout.run(AbstractProtocol.java:1256)
        at java.lang.Thread.run(Thread.java:748)

   Locked ownable synchronizers:
        - None

"http-nio-8080-Acceptor" #46 daemon prio=5 os_prio=0 tid=0x00000111f42b8000 nid=0x3910 runnable [0x0000000159dfe000]
   java.lang.Thread.State: RUNNABLE
        at sun.nio.ch.ServerSocketChannelImpl.accept0(Native Method)
        at sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:424)
        at sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:252)
        - locked <0x00000006e283b9f8> (a java.lang.Object)
        at org.apache.tomcat.util.net.NioEndpoint.serverSocketAccept(NioEndpoint.java:455)
        at org.apache.tomcat.util.net.NioEndpoint.serverSocketAccept(NioEndpoint.java:71)
        at org.apache.tomcat.util.net.Acceptor.run(Acceptor.java:129)
        at java.lang.Thread.run(Thread.java:748)

   Locked ownable synchronizers:
        - None

"http-nio-8080-Poller" #45 daemon prio=5 os_prio=0 tid=0x00000111f42b9800 nid=0x230c runnable [0x0000000159cfe000]
   java.lang.Thread.State: RUNNABLE
        at sun.nio.ch.WindowsSelectorImpl$SubSelector.poll0(Native Method)
        at sun.nio.ch.WindowsSelectorImpl$SubSelector.poll(WindowsSelectorImpl.java:296)
        at sun.nio.ch.WindowsSelectorImpl$SubSelector.access$400(WindowsSelectorImpl.java:278)
        at sun.nio.ch.WindowsSelectorImpl.doSelect(WindowsSelectorImpl.java:159)
        at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86)
        - locked <0x00000006e2856638> (a sun.nio.ch.Util$3)
        - locked <0x00000006e2856648> (a java.util.Collections$UnmodifiableSet)
        - locked <0x00000006e28565b8> (a sun.nio.ch.WindowsSelectorImpl)
        at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97)
        at org.apache.tomcat.util.net.NioEndpoint$Poller.run(NioEndpoint.java:716)
        at java.lang.Thread.run(Thread.java:748)

   Locked ownable synchronizers:
        - None

從 JDK 5 開始,java.lang.Thread 類新增了一個(gè) getAllStackTraces() 方法用于獲取虛擬機(jī)中所有線程的 StackTraceElement 對(duì)象,使用這個(gè)方法可以通過簡(jiǎn)單的幾行代碼完成 jstack 的大部分功能,我們可以使用這個(gè)方法來做一個(gè)管理員頁(yè)面,可以隨時(shí)使用瀏覽器來查看線程堆棧。

可視化工具

JDK 中除了附帶大量的命令行工具外,還提供了幾個(gè)功能集成度更高的可視化工具,用戶可以使用這些可視化工具以更加便捷的方式進(jìn)行進(jìn)程故障診斷和調(diào)試工作。這些工具主要包括 JConsole、VisualVM 和 JMC,其中 JConsole 在 JDK 5 中發(fā)布,VisualVM 在 JDK 6 中發(fā)布,Java Mission Control(JMC)在 JDK 7 中發(fā)布。

JConsole:Java 監(jiān)視與管理控制臺(tái)

JConsole(Java Monitoring and Management Console)是一款基于 JMX(Java Management Extensions)的可視化監(jiān)視、管理工具。它的主要功能是通過 JMX 的 MBean(Managed Bean)對(duì)系統(tǒng)進(jìn)行信息收集和參數(shù)動(dòng)態(tài)調(diào)整。JMX 是一種開發(fā)性的技術(shù),不僅可以用在虛擬機(jī)本身的管理上,還可以運(yùn)行于虛擬機(jī)之上的軟件中。

通過 JDK/bin 目錄下的 jconsole.exe 啟動(dòng) JConsole 后,會(huì)自動(dòng)搜索出本機(jī)運(yùn)行的所有虛擬機(jī)進(jìn)程,而不需要用戶自己使用 jps 來查詢,如下圖所示:

JVM 性能監(jiān)控與故障處理工具,jvm
選擇要監(jiān)控的 JVM 進(jìn)程,點(diǎn)擊 “連接” 按鈕進(jìn)入 JConsole 主界面,主界面里共包括 “概述”、“內(nèi)存”、“線程”、“類”、“VM 摘要” 和 “MBean” 六個(gè)頁(yè)簽。

頁(yè)簽的作用如下:

  • 概述:顯示整個(gè)虛擬機(jī)主要運(yùn)行數(shù)據(jù)的概覽信息,包括 “堆內(nèi)存使用情況”、“線程”、“類”、“CPU 使用情況” 四項(xiàng)信息的曲線圖。
  • 內(nèi)存:相當(dāng)于可視化的 jstat 命令,用于監(jiān)視被收集器管理的虛擬機(jī)內(nèi)存的變化趨勢(shì)。
  • 線程:相當(dāng)于可視化的 jstack 命令,遇到線程停頓的時(shí)候可以使用這個(gè)頁(yè)簽的功能進(jìn)行分析。
  • 類:顯示虛擬機(jī)中類的統(tǒng)計(jì)信息
  • VM 摘要:當(dāng)前連接的 VM 的摘要信息

在診斷 JVM 故障的時(shí)候我們最長(zhǎng)使用 “內(nèi)存” 和 “線程” 頁(yè)簽。

Java VisualVM:多合一故障處理工具

VisualVM(All-in-One Java Troubleshooting Tool)是功能最強(qiáng)大的運(yùn)行監(jiān)視和故障處理程序之一,曾經(jīng)在很長(zhǎng)一段時(shí)間內(nèi)是 Oracle 官方主力發(fā)展的虛擬機(jī)故障處理工具。Oracle 曾在 VisualVM 的軟件說明中寫上了 “All-in-One” 的字樣,預(yù)示著它除了常規(guī)的運(yùn)行監(jiān)視、故障處理外,還將提供其他方面的能力,例如性能分析。

VisualVM 基于 NetBeans 平臺(tái)開發(fā)工具,所以它具備通過插件擴(kuò)展功能的能力,有了插件擴(kuò)展支持,VisualVM 可以做到:

  • 顯示虛擬機(jī)進(jìn)程以及進(jìn)程的配置、環(huán)境信息(jps、jinfo)
  • 監(jiān)控應(yīng)用程序的處理器、垃圾收集、堆、方法區(qū)以及線程的信息(jstat、jstack)
  • dump 以及分析堆棧轉(zhuǎn)儲(chǔ)快照(jmap、jhat)
  • 方法級(jí)的程序運(yùn)行性能分析,找出被調(diào)用最多、運(yùn)行時(shí)間最長(zhǎng)的方法
  • 離線程序快照:收集程序的運(yùn)行時(shí)配置、線程 dump、內(nèi)存 dump 等信息建立一個(gè)快照,可以將快照發(fā)送開發(fā)者處進(jìn)行 Bug 反饋
  • 其他插件帶來的無限可能性

初始狀態(tài)下的 VisualVM 并沒有加載任何插件,雖然基本的監(jiān)視、線程面板的功能主程序都以默認(rèn)插件的形式提供。

通過雙擊 %JAVA_HOME%/bin/jvisualvm.exe 來啟動(dòng) VisualVM,主頁(yè)面如下:

JVM 性能監(jiān)控與故障處理工具,jvm

Java Mission Control:可支持在線的監(jiān)控工具

和前面兩款免費(fèi)的可視化工具不同,JMC 如果要在生產(chǎn)環(huán)境使用需要商業(yè)授權(quán)才行,但是在個(gè)人開發(fā)環(huán)境下仍然是免費(fèi)的。

需要注意的是,JDK 8 并不包含 JMC,你如果想要嘗試 JMC 需要單獨(dú)下載它,官方的下載地址是:https://jdk.java.net/jmc/,截至 2023-10-04,JMC 的最新版本是 JMC 8.3.1,從 JMC 8.1 開始運(yùn)行 JMC 的 JDK 版本要求是 JDK 11 及以上,JMC 8.0 仍然仍然可以運(yùn)行在 JDK 8 之上,所以你本地安裝的是 JDK 8 的話,那么你需要下載 JMC 8.0 版本。

但是官網(wǎng)只提供了最新版本的下載連接,stackoverflow 上這個(gè)問題的答案列出了其他下載 JMC 發(fā)行版的地址,其中一個(gè)地址是:https://adoptium.net/zh-CN/jmc/,你可以在這個(gè)地址中下載到 JMC 8.0 版本。

JVM 性能監(jiān)控與故障處理工具,jvm
解壓之后的目錄結(jié)構(gòu)如下:

JVM 性能監(jiān)控與故障處理工具,jvm
其中 jmc.imi 是配置文件,在啟動(dòng) JMC 之前,你需要在 jmc.ini 文件中設(shè)置編碼格式為 UTF-8,否則啟動(dòng)之后會(huì)出現(xiàn)亂碼,在 jmc.ini 文件中添加一下內(nèi)容即可:

-Dfile.encoding=UTF-8

最后雙擊 jmc.exe 啟動(dòng) JMC。

JVM 性能監(jiān)控與故障處理工具,jvm
在 ”JVM 瀏覽器“ 頁(yè)簽中展示了本機(jī)上正在運(yùn)行的 JVM,雙擊其中一個(gè)進(jìn)行連接,把連接后的進(jìn)程展開可以看到每個(gè)進(jìn)程的數(shù)據(jù)都有 MBean 和 JFR 兩個(gè)數(shù)據(jù)來源。關(guān)于 MBean 這部分?jǐn)?shù)據(jù),與 JConsole 和 VisualVM 上取的內(nèi)容是一樣的,只是展示形式上有些差別。JFR 是和 MBean 不同的數(shù)據(jù)收集方式,它對(duì)被分析 JVM 程序性能影響和數(shù)據(jù)的質(zhì)量都要比使用 MBean 要高。文章來源地址http://www.zghlxwxcb.cn/news/detail-726162.html

到了這里,關(guān)于JVM 性能監(jiān)控與故障處理工具的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 性能調(diào)優(yōu)篇 二、Jvm監(jiān)控及診斷工具-命令行篇

    性能調(diào)優(yōu)篇 二、Jvm監(jiān)控及診斷工具-命令行篇

    性能診斷是軟件工程師在日程生活中需要經(jīng)常面對(duì)和解決的問題 Java作為最流行的編程語言之一,其應(yīng)用性能診斷一直收到業(yè)內(nèi)廣泛關(guān)注。造成Java應(yīng)用出現(xiàn)性能問題的因素非常多,例如線程控制,磁盤讀寫,數(shù)據(jù)庫(kù)訪問,網(wǎng)絡(luò)io,垃圾收集等。 想要定位這些問題,一款優(yōu)秀的

    2024年02月11日
    瀏覽(26)
  • JVM-jvisualvm性能監(jiān)控可視化工具使用與eden-s0-s1分配分析(三)

    JVM-jvisualvm性能監(jiān)控可視化工具使用與eden-s0-s1分配分析(三)

    目錄 第一步:安裝jvisualvm ?第二步:安裝VisualvmGc插件 方式一:jvisualvm工具直接下載安裝 方式二:去官網(wǎng)下載導(dǎo)入安裝 總結(jié) 第三步:idea安裝VisualvM Launcher插件 第四步:演示young中eden、s0、s1垃圾回收過程 1、配置jvm堆大小 ?2、啟動(dòng)一個(gè)項(xiàng)目 3、打開jvisualvm 第五步:jvisualvm性

    2024年02月11日
    瀏覽(23)
  • JVM 性能調(diào)優(yōu)及監(jiān)控診斷工具 jps、jstack、jmap、jhat、jstat、hprof 使用詳解

    JVM 性能調(diào)優(yōu)及監(jiān)控診斷工具 jps、jstack、jmap、jhat、jstat、hprof 使用詳解

    目錄 一. 前言 二.?jps(Java Virtual Machine Process Status Tool) 三. jstack 四.?jmap(Memory Map)和 jhat(Java Heap Analysis Tool) 五. jstat(JVM統(tǒng)計(jì)監(jiān)測(cè)工具) 六. hprof(Heap/CPU Profiling Tool) 七. 總結(jié) ? ? 工欲善其事,必先利其器。在日常的企業(yè)級(jí) Java 應(yīng)用開發(fā)、維護(hù)中,我們可能會(huì)碰到下面

    2024年02月04日
    瀏覽(18)
  • 性能測(cè)試 —— 生成html測(cè)試報(bào)告、參數(shù)化、jvm監(jiān)控

    性能測(cè)試 —— 生成html測(cè)試報(bào)告、參數(shù)化、jvm監(jiān)控

    (1)找到j(luò)meter 的安裝目錄,下的bin中的jmeter.properties(jmeter配置文件) (2) ctrl +f ,搜索jmeter.save.saveservice.output_format,取消井號(hào) 并且 把等號(hào)后的xml改為csv,點(diǎn)擊保存 (1)在jmeter的安裝目錄下,新建tests文件夾,在tests文件夾中新建script和report文件夾,script是放腳本的,report是放測(cè)

    2024年02月09日
    瀏覽(23)
  • JVM監(jiān)控及診斷工具大全

    JVM監(jiān)控及診斷工具大全

    jconsole:從Java5開始,在JDK中自帶的java監(jiān)控和管理控制臺(tái)。用于對(duì)JVM中內(nèi)存、線程和類等的監(jiān)控,是一個(gè)基于JMX(java management extensions)的GUI性能監(jiān)控工具。 官方地址:https://docs.oracle.com/javase/7/docs/technotes/guides/management/jconsole.html Visual VM是一個(gè)功能強(qiáng)大的多合一故障診斷和性能

    2024年02月08日
    瀏覽(22)
  • 【Jvm】性能調(diào)優(yōu)(拓展)Jprofiler如何監(jiān)控和解決死鎖、內(nèi)存泄露問題

    【Jvm】性能調(diào)優(yōu)(拓展)Jprofiler如何監(jiān)控和解決死鎖、內(nèi)存泄露問題

    Jprofilers是針對(duì)Java開發(fā)的 性能分析工具(免費(fèi)試用10天) , 可以對(duì)Java程序的 內(nèi)存,CPU,線程,GC,鎖 等進(jìn)行監(jiān)控和分析 , 本人IDEA版本是 2020.2.2 ,選擇的Jprofiler版本是 12.0 (早期的版本是純英文的, 12.0支持中文 ,安裝主要考慮是否與IDEA插件兼容即可) 進(jìn)入Jprofiler官網(wǎng)下載 - Jprofiler 版本這

    2024年02月19日
    瀏覽(24)
  • 【Java可執(zhí)行命令】(十七)JVM運(yùn)行時(shí)信息動(dòng)態(tài)維護(hù)工具 jinfo:一個(gè)維護(hù) JVM 相關(guān)的配置參數(shù)和系統(tǒng)屬性的工具,輔助故障排除、診斷和優(yōu)化 ~

    【Java可執(zhí)行命令】(十七)JVM運(yùn)行時(shí)信息動(dòng)態(tài)維護(hù)工具 jinfo:一個(gè)維護(hù) JVM 相關(guān)的配置參數(shù)和系統(tǒng)屬性的工具,輔助故障排除、診斷和優(yōu)化 ~

    jinfo 是 Java Development Kit (JDK) 自帶的一款命令行工具。它旨在為用戶提供進(jìn)程的運(yùn)行時(shí)信息,特別是與 Java 虛擬機(jī) (JVM) 相關(guān)的配置和系統(tǒng)屬性。 jinfo 使得用戶可以輕松地查看和修改正在運(yùn)行的 Java 進(jìn)程的參數(shù),以便進(jìn)行 故障排除、診斷和優(yōu)化 。 jinfo 允許用戶動(dòng)態(tài)查詢和修改

    2024年02月13日
    瀏覽(31)
  • JVM-Arthas高效的監(jiān)控工具

    JVM-Arthas高效的監(jiān)控工具

    一、arthas介紹 3.選擇監(jiān)控哪個(gè)進(jìn)程 4.進(jìn)入具體進(jìn)程 二、arthas的基礎(chǔ)命令與基本操作 1.查詢包含Java的系統(tǒng)屬性: 命令:sysprop |grep java 1.查詢不含Java的系統(tǒng)屬性: 命令:sysprop | grep -v java 3.打印歷史命令 命令:history 4.查看當(dāng)前工作目錄 命令:pwd 三、如何使用arthas監(jiān)控線上服務(wù)

    2024年01月23日
    瀏覽(21)
  • JVM-性能優(yōu)化工具 MAT

    JVM-性能優(yōu)化工具 MAT

    MAT( Memory Analyzer Tool )工具是一款功能強(qiáng)大的 ]ava 堆內(nèi)存分析器。可以用于查找內(nèi)存泄漏以及查看內(nèi)存消耗情況。MAT是基于 Eclipse 開發(fā)的,不僅可以單獨(dú)使用,還可以作為插件的形式嵌入在 Eclipse 中使用。是一款免費(fèi)的性能分析工具,使用起來非常方便。 https://www.eclipse.

    2024年02月11日
    瀏覽(17)
  • 【Jvm】性能調(diào)優(yōu)(上)線上問題排查工具匯總

    【Jvm】性能調(diào)優(yōu)(上)線上問題排查工具匯總

    產(chǎn)品閉環(huán) 產(chǎn)品閉環(huán)是能夠讓 用戶主動(dòng)迭代促進(jìn)產(chǎn)品發(fā)展的方式 。例如一些內(nèi)容產(chǎn)品,比如 糗事百科 ,種子用戶 產(chǎn)出高質(zhì)量?jī)?nèi)容 ,舉報(bào)與贊起到 篩選內(nèi)容 ,提高內(nèi)容質(zhì)量的作用, 內(nèi)容質(zhì)量的提升有助于吸引更多用戶 。 這就是產(chǎn)品閉環(huán), 產(chǎn)品給予用戶需求解決方法,用戶

    2024年02月20日
    瀏覽(30)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包