JVM-探究(四):虛擬機(jī)監(jiān)控和分析工具

文章用來(lái)介紹常用的虛擬機(jī)內(nèi)存監(jiān)控和虛擬機(jī)相關(guān)的故障排除工具明场。 包括JDK自帶的命令行工具灰羽、和一些可視化工具,如jvisualvm渣刷。

命令行工具

JDK一些常用的命令行工具鹦肿,能夠讓你不安裝、不需要在服務(wù)器輸出文件拷貝到本地的在進(jìn)行分析辅柴,從而能夠快速地查看虛擬機(jī)參數(shù)箩溃,了解虛擬機(jī)當(dāng)前的運(yùn)行狀況,十分實(shí)用碌识。本問(wèn)介紹的命令都需要在 JDK8 或以上的環(huán)境運(yùn)行碾篡,如果在低于 JDK8 可能會(huì)有部分指標(biāo)亂碼。

命令一覽

名稱 主要作用
jps JVM Process Status Tool筏餐, 顯示系統(tǒng)內(nèi)所有的 HotSpot 進(jìn)程开泽。 注意:只顯示當(dāng)前用戶的
jstat JVM Statistics Monitoring Tool, 用于收集 HotSpot 虛擬機(jī)各方面的參數(shù)
jinfo Configuration Info for Java魁瞪, 顯示虛擬機(jī)配置信息
jmap Memory Map for Java穆律,生成虛擬機(jī)的內(nèi)存轉(zhuǎn)儲(chǔ)快照片
jhat JVM Heap Dump Browser,用于分析heapdump文件导俘,他會(huì)建立一個(gè) HTTP/HTML 服務(wù)器峦耘,讓用戶可以在榴瀏覽器上查看分析結(jié)果
jstack Stack Trace for Java, 顯示虛擬機(jī)的線程快照

jps

全名:Java Virtual Machine Process Status Tool

主要選項(xiàng)

選項(xiàng) 含義
-q 忽略主類名稱旅薄,只輸出 LVMID(一般和進(jìn)程號(hào)相同
-m 打印被傳入到 main() 方法的參數(shù)
-l 打印 main 方法的包名辅髓,或者運(yùn)行的 JAR 包的全路徑名
-v 打印傳遞給 JVM 的參數(shù)
-V 打印通過(guò) flags file 傳遞給 JVM 的參數(shù)
-Joption 因?yàn)閖ps也是運(yùn)行在 JVM 之上的,這就是傳遞給運(yùn)行jps的JVM的參數(shù)少梁。eg:-J-Xms48m

使用示例

image
image
image
image
image

jstat

全名:Java Virtual Machine statistics monitoring tool

主要選項(xiàng)

選項(xiàng) 作用
-class 監(jiān)視類裝載洛口、卸載數(shù)量凯沪、總空間以及類裝載所耗費(fèi)的時(shí)間
-gc 監(jiān)視Java堆狀況,包括Eden區(qū)域挺举、兩個(gè)survivor區(qū)烘跺、老年代、元空間等的容量液荸、已用空間瞻佛、GC 時(shí)間合計(jì)等信息
-compiler 輸出 JIT 編譯器編譯過(guò)的方法、耗時(shí)等信息
-gccapacity 監(jiān)視內(nèi)容與-gc基本相同,但輸出主要關(guān)注Java堆各個(gè)區(qū)域使用到的最大伤柄、最小空間
-gcutil 監(jiān)視內(nèi)容與-gc基本相同绊困,但輸出主要關(guān)注已使用空間占總空間百分比
-gccause 與 -gcutil 功能一樣,但是會(huì)額外輸出導(dǎo)致上一次GC產(chǎn)生的原因
-gcnew 監(jiān)視新生代 GC 狀況
-gcnewcapacity 監(jiān)視內(nèi)容與 -gcnew 基本相同适刀,輸出主要關(guān)注使用到的最大秤朗、最小空間
-gcold 監(jiān)視老年代 GC 情況
-gcoldcapacity 監(jiān)視內(nèi)容與 -gcold 基本相同,輸出主要關(guān)注使用到的最大笔喉、最小空間
-gcpermcapacity 輸出永久代使用到的最大取视、最小空間(JDK8中已經(jīng)沒(méi)有了,并且暫時(shí)沒(méi)有找到查看metaspace的大小的命令常挚,可以直接使用-gc)
-printcompilation 輸出已經(jīng)被 JIT 編譯過(guò)的方法

使用示例

jstat -class

image

從左到右的含義分別是:

選項(xiàng) 描述
Loaded 已經(jīng)加載的類數(shù)量
Bytes 已經(jīng)加載類大小
Unloaded 卸載的類數(shù)量
Bytes 卸載的類大小
Time 類加載和卸載操作消耗的時(shí)間

jstat -compiler

~ jstat -compiler  50674
Compiled Failed Invalid   Time   FailedType FailedMethod
   1248      0       0     1.36          0

從左到右的含義分別是:

選項(xiàng) 描述
Compiled JIT 編譯任務(wù)的數(shù)量
Failed JIT 失敗的編譯任務(wù)
Invalid 無(wú)效的 JIT 編譯任務(wù)
Time 編譯需要的時(shí)間
FailedType 最后一個(gè)編譯失敗的原因
FailedMethod 最后一個(gè)編譯失敗的類名和方法

jstat -gc

jacob@JacobMBPlocal~ jstat -gc  50674
 S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT
10752.0 10752.0  0.0   5396.8 65536.0  24964.9   175104.0     80.0    17536.0 17112.7 2176.0 2040.8      1    0.006   0      0.000    0.006

從左到右的含義分別是:

選項(xiàng) 描述
SOC S0 區(qū)域總大小
S1C S1 區(qū)域總大小
S0U S0 區(qū)域使用大小
S1U S1 區(qū)域使用大小
EC Eden 總大小
EU Eden 區(qū)域使用大小
OC 當(dāng)前 Old Space 總大小
OU Old Space 使用大小
PC 當(dāng)前 Permanent Space 總大小
PU Permanent Space 使用大小
YCG 新生代 GC 發(fā)生次數(shù)
YGCT 新生代 GC 時(shí)間
FGC full GC 次數(shù)q
FGCT full GC 時(shí)間
GCT 垃圾回收時(shí)間總和

jstat -gccapacity

~ jstat -gccapacity  50674
NGCMN    NGCMX     NGC     S0C   S1C       EC      OGCMN      OGCMX       OGC         OC       MCMN     MCMX      MC     CCSMN    CCSMX     CCSC    YGC    FGC
87040.0 238592.0  87040.0 10752.0 10752.0  65536.0   175104.0   478208.0   175104.0   175104.0      0.0 1064960.0  17536.0      0.0 1048576.0   2176.0      1     0

從左到右的含義分別是:

選項(xiàng) 描述
NGCMN 新生代使用到的最小空間作谭。 Minimum new generation capacity (KB).
NGCMX 新生代使用到的最大空間。Maximum new generation capacity (KB).
NGC 當(dāng)前新生代大小奄毡。Current new generation capacity (KB).
S0C 當(dāng)前 S0 區(qū)域大小折欠。Current survivor space 0 capacity (KB).
S1C 當(dāng)前 S1 區(qū)域大小。Current survivor space 1 capacity (KB).
EC 當(dāng)前 Eden 區(qū)域大小吼过。Current eden space capacity (KB).
OGCMN 老年代使用到的最小空間大小锐秦。Minimum old generation capacity (KB).
OGCMX 老年代使用到的最大空間大小。Maximum old generation capacity (KB).
OGC 當(dāng)前老年代大小盗忱。Current old generation capacity (KB).
OC 當(dāng)前老年代空間大小酱床。Current old space capacity (KB).
PGCMN 永久代使用到的最小空間。Minimum permanent generation capacity (KB).
PGCMX 永久代使用到的最大空間趟佃。Maximum Permanent generation capacity (KB).
PGC 當(dāng)前永久代大小揍堕。Current Permanent generation capacity (KB).
PC 當(dāng)前永久空間大小。Current Permanent space capacity (KB).
VGC Young GC 次數(shù)贮泞。 Number of Young generation GC Events.
FGC Full GC 次數(shù)啃擦。Number of Full GC Events.

如果讀者對(duì)于 Current old generation capacityCurrent old space capacity 有疑問(wèn)令蛉,可以參考StackOverFlow上面的這個(gè)提問(wèn):jstat: difference between OGC & OC, PGC & PC ,簡(jiǎn)單點(diǎn)描述就是 一個(gè)包含的空間不一定只有一個(gè)蝎宇,只是 HotSpot 恰好只有一個(gè)姥芥。 OGC = sum(all OC)

jstat -gcutil

gcutilgccapacity 展現(xiàn)的數(shù)據(jù)基本相同,gccapacity 只是一個(gè)是精確的數(shù)據(jù)台囱,gcutil 是更加直觀的百分比簿训。

$ jstat -gcutil 17931
  S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT
  0.00   7.25   9.64   3.52  98.53  96.94    385    6.771     6    0.517    7.288

從左到右的含義分別是:

選項(xiàng) 描述
S0 S0 區(qū)空間占用百分比煎楣。Survivor space 0 utilization as a percentage of the space's current capacity.
S1 S1 區(qū)空間占用百分比。Survivor space 1 utilization as a percentage of the space's current capacity.
E Eden 區(qū)空間占用百分比困曙。Eden space utilization as a percentage of thespace's current capacity.
O 老年代空間占用百分比慷丽。Old space utilization as a percentage of the space's current capacity.
P 永久代空間占用百分比要糊。Permanent space utilization as a percentage ofthe space's current capacity.
YGC Young GC 次數(shù)。Number of young generation GC events.
YGCT Young GC 時(shí)間奶赠。Young generation garbage collection time.
FGC Full GC 次數(shù)毅戈。Number of Full GC events.
FGCT Full GC 時(shí)間赘理。Full garbage collection time.
GCT 總的 GC 時(shí)間。Total garbage collection time.

jstat -gccause

gccausegccause基本相同令花,多出了兩個(gè)參數(shù)嫂沉,分別表示上一次 GC 的原因趟章,和本次 GC 的原因。

$ jstat -gccause 17931
  S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT    LGCC                 GCC
  5.30   0.00  40.79   3.82  98.34  95.90    438    7.501     6    0.517    8.018 Allocation Failure   No GC

新增的兩個(gè)參數(shù):

選項(xiàng) 描述
LGCC 上次 GC 的原因赖淤。Cause of last Garbage Collection.
GCC 本次 GC 的原因确丢。Cause of current Garbage Collection.

jstat -gcnew

新生代統(tǒng)計(jì)

$ jstat -gcnew 17931
 S0C    S1C    S0U    S1U   TT MTT  DSS      EC       EU     YGC     YGCT
52416.0 52416.0    0.0 2820.6 15  15 26208.0 419456.0 321595.5    453    7.662
選項(xiàng) 含義
SOC 當(dāng)前 S0 區(qū)域大小鲜侥。Current survivor space 0 capacity (KB).
S1C 當(dāng)前 S1 區(qū)域大小。Current survivor space 1 capacity (KB).
S0U S0 占用大小赘阀。Survivor space 0 utilization (KB).
S1U S1 占用大小。Survivor space 1 utilization (KB).
TT Tenuring 閾值宋欺。Tenuring threshold.
MTT 最大 Tenuring 閾值酸休。Maximum tenuring threshold.
DSS 需要的S區(qū)域大小。Desired survivor size (KB).
EC Current eden space capacity (KB).
EU Eden space utilization (KB).
VGC Number of young generation GC events.
VGCT Young generation garbage collection time.

Tenuring 閾值是動(dòng)態(tài)變化的宿刮,最大 Tenuring 閾值可以通過(guò) JVM 參數(shù)設(shè)置。具體可以參考我的另外一篇博客 Tenuring Threshold 是動(dòng)態(tài)變化的

DSS 為需要的 S 空間的大小磕潮,如果實(shí)際空間不足,新生代的對(duì)象會(huì)提前進(jìn)入老年代斤富。提前轉(zhuǎn)移實(shí)驗(yàn)

jstat -gcnewcapacity

$ jstat -gcnewcapacity 17931
  NGCMN      NGCMX       NGC      S0CMX     S0C     S1CMX     S1C       ECMX        EC      YGC   FGC
  524288.0   524288.0   524288.0  52416.0  52416.0  52416.0  52416.0   419456.0   419456.0   486     6
選項(xiàng) 描述
NGCMN 新生代最大空間大小戏罢。Minimum new generation capacity (KB).
NGCMX 新生代最小空間大小。Maximum new generation capacity (KB).
NGC 當(dāng)前新生代空間大小讲岁。Current new generation capacity (KB).
S0CMX S0 區(qū)域最大空間大小缓艳。Maximum survivor space 0 capacity (KB).
S0C S0 區(qū)域當(dāng)前空間大小。Current survivor space 0 capacity (KB).
S1CMX S1 區(qū)域最大空間大小溪窒。Maximum survivor space 1 capacity (KB).
S1C S1 區(qū)域當(dāng)前空間大小摹芙。Current survivor space 1 capacity (KB).
ECMX Eden 區(qū)域最大空間大小浮禾。Maximum eden space capacity (KB).
EC Eden 區(qū)域當(dāng)前空間大小裸影。Current eden space capacity (KB).
YGC Young GC 次數(shù)轩猩。Number of young generation GC events.
FGC Full GC 次數(shù)晤锹。Number of Full GC Events.

jstat -gcold

$ jstat -gcold 17931
   MC       MU      CCSC     CCSU       OC          OU       YGC    FGC    FGCT     GCT
102248.0 100603.7  10324.0   9900.6   1572864.0     63154.7    497     6    0.517    8.744
選項(xiàng) 描述
PC 當(dāng)前永久代大小。Current permanent space capacity (KB).
PU 當(dāng)前永久代占用车遂。Permanent space utilization (KB).
OC 當(dāng)前老年代大小。Current old space capacity (KB).
OU 當(dāng)前老年代占用斯辰。Old space utilization (KB).
YGC Young GC 次數(shù)舶担。Number of young generation GC events.
FGC Full GC 次數(shù)。Number of Full GC events.
FGCT Full GC 時(shí)間彬呻。Full garbage collection time.
GCT 所有 GC 時(shí)間衣陶。Total garbage collection time.

jstat -gcoldcapacity

$ jstat -gcoldcapacity 17931
   OGCMN       OGCMX        OGC         OC       YGC   FGC    FGCT     GCT
  1572864.0   1572864.0   1572864.0   1572864.0   508     6    0.517    8.923
選項(xiàng) 描述
OGCMN 最小老年代大小。Minimum old generation capacity (KB).
OGCMV 最大老年代大小闸氮。Maximum old generation capacity (KB).
OGC 當(dāng)前老年代大小剪况。Current old generation capacity (KB).
OC 當(dāng)前老年空間大小镐作。Current old space capacity (KB).
YGC Young GC 次數(shù)杨蛋。Number of young generation GC events.
FGC Full GC 次數(shù)。Number of Full GC events.
FGCT Full GC 時(shí)間峦嗤。Full garbage collection time.
GCT 所有 GC 時(shí)間。Total garbage collection time.

jstat -printcompilation

$ jstat -printcompilation 17931
Compiled  Size  Type Method
   21778   2719    1 com/sankuai/octo/config/model/file_param_t hashCode
選項(xiàng) 描述
Compiled Number of compilation tasks performed.
Size Number of bytes of bytecode for the method.
Type Compilation type.
Method Class name and method name identifying the compiled method. Class name uses "/" instead of "." as namespace separator. Method name is the method within the given class. The format for these two fields is consistent with the HotSpot -XX:+PrintComplation option.

jstat 的額外參數(shù)

上述的命令都可以使用類似下面的參數(shù)

jstat -gcutil -t 17931 500 100 其中-t表示答應(yīng)時(shí)間戳、17931為 lvmid、500表示間隔 500ms 來(lái)輸出信息清寇、 100表示信息條目顯示d的數(shù)量盔夜。

譬如,下面顯示了10行蝇率,顯示時(shí)間間隔為500ms

$ jstat -gcutil 17931 500 10
  S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT
  9.55   0.00  69.10   4.26  98.34  95.92    552    8.950     6    0.517    9.466
  9.55   0.00  71.22   4.26  98.34  95.92    552    8.950     6    0.517    9.466
  9.55   0.00  72.88   4.26  98.34  95.92    552    8.950     6    0.517    9.466
  9.55   0.00  74.90   4.26  98.34  95.92    552    8.950     6    0.517    9.466
  9.55   0.00  77.01   4.26  98.34  95.92    552    8.950     6    0.517    9.466
  9.55   0.00  78.98   4.26  98.34  95.92    552    8.950     6    0.517    9.466
  9.55   0.00  80.78   4.26  98.34  95.92    552    8.950     6    0.517    9.466
  9.55   0.00  82.90   4.26  98.34  95.92    552    8.950     6    0.517    9.466
  9.55   0.00  84.71   4.26  98.34  95.92    552    8.950     6    0.517    9.466
  9.55   0.00  86.85   4.26  98.34  95.92    552    8.950     6    0.517    9.466

jinfo

輸出 Java 配置信息

下面是 Intellj IDEA 的部分輸出信息

jinfo 88747
Attaching to process ID 88747, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.131-b11
Java System Properties:

java.vendor = Oracle Corporation
preload.project.path = /Users/jacob/Developer/IDEA/campaignmanage
sun.java.launcher = SUN_STANDARD
idea.config.path = /Users/jacob/Library/Preferences/IntelliJIdea2017.3
sun.management.compiler = HotSpot 64-Bit Tiered Compilers
sun.nio.ch.bugLevel =
idea.paths.selector = IntelliJIdea2017.3
kotlin.daemon.client.alive.path = "/var/folders/hw/_d9gvls95316wtq_crffgz3w0000gn/T/kotlin-idea-4717993236071674726-is-running"
jnidispatch.path = /Users/jacob/Library/Caches/IntelliJIdea2017.3/compile-server/campaignmanage_7408d958/_temp_/jna-100881631/jna5884254379081076550.tmp
os.name = Mac OS X
sun.boot.class.path = /Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/jre/lib/resources.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/jre/lib/rt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/jre/lib/sunrsasign.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/jre/lib/jsse.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/jre/lib/jce.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/jre/lib/charsets.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/jre/lib/jfr.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/jre/classes
idea.plugins.path = /Users/jacob/Library/Application Support/IntelliJIdea2017.3
java.vm.specification.vendor = Oracle Corporation
java.runtime.version = 1.8.0_131-b11
jna.loaded = true
io.netty.serviceThreadPrefix = Netty
user.name = jacob
kotlin.incremental.compilation = true
idea.home.path = /Applications/IntelliJ IDEA.app/Contents
user.language = zh
jdt.compiler.useSingleThread = true
sun.boot.library.path = /Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/jre/lib
java.version = 1.8.0_131
user.timezone = Asia/Shanghai
java.net.preferIPv4Stack = true
kotlin.daemon.enabled =
sun.arch.data.model = 64

java.vm.name = Java HotSpot(TM) 64-Bit Server VM
file.encoding = UTF-8
java.specification.version = 1.8
compile.parallel = false
io.netty.noUnsafe = true

VM Flags:
Non-default VM flags: -XX:CICompilerCount=4 -XX:InitialHeapSize=268435456 -XX:MaxHeapSize=734003200 -XX:MaxNewSize=244318208 -XX:MinHeapDeltaBytes=524288 -XX:NewSize=89128960 -XX:OldSize=179306496 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseFastUnorderedTimeStamps -XX:+UseParallelGC
Command line:  -Xmx700m -Djava.awt.headless=true -Djava.endorsed.dirs="" -Djdt.compiler.useSingleThread=true -Dpreload.project.path=/Users/jacob/Developer/IDEA/campaignmanage -Dpreload.config.path=/Users/jacob/Library/Preferences/IntelliJIdea2017.3/options -Dcompile.parallel=false
選項(xiàng) 描述
參數(shù)為空 打印命令行標(biāo)記和系統(tǒng)屬性
-flags 打印命令行標(biāo)記
-sysprops 打印Java系統(tǒng)屬性

jmap

下面的工具介紹不再提供例子拾稳,讀者感興趣可以自己嘗試

選 項(xiàng) 作 用
-dump 生成 Java 堆轉(zhuǎn)儲(chǔ)快照。格式為:-dump:[live,]format=b,file=<filename>记靡,其中 live 子參數(shù)說(shuō)明是否只 dump 出存活的對(duì)象
-finalizerinfo 顯示在 F-Queue 中等待 Finalizer 想成執(zhí)行 finalize 方法的對(duì)象轿腺。只在 Linux/Solaris 平臺(tái)下有效坏平。在JDK9 Mac 平臺(tái)失敗,JDK8 可以
-heap 顯示 Java 堆詳細(xì)信息吕漂,如使用哪種回收器、參數(shù)配置思灰、分代狀況等油湖。只在 Linux/Solaris 平臺(tái)下有效矢棚。在JDK9 Mac 平臺(tái)失敗,JDK8可以
-histo 顯示堆中對(duì)象的統(tǒng)計(jì)信息,包括類、實(shí)例數(shù)量玉凯、合計(jì)容量
permstat 以ClassLoader為統(tǒng)計(jì)口徑顯示永久代內(nèi)存狀態(tài)势腮,只在 Linux/Solaris 平臺(tái)下有效。 JDK8以上版本已經(jīng)廢棄
-F 當(dāng)虛擬機(jī)進(jìn)程對(duì) -dump 選項(xiàng)沒(méi)有響應(yīng)時(shí)漫仆,可使用這個(gè)選項(xiàng)強(qiáng)制生成 dump 快照捎拯。只在 Linux/Solaris 平臺(tái)下有效。

jhat

虛擬機(jī)堆轉(zhuǎn)儲(chǔ)快照分析工具,不建議使用, 建議使用 visualVM 等工具進(jìn)行分析

jstack

Java堆棧跟蹤工具

"線程快照就是當(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í)間停頓的常見(jiàn)原因建芙。線程出現(xiàn)停頓的時(shí)候通過(guò)jstack來(lái)查看各個(gè)線程的調(diào)用堆棧,就可以知道沒(méi)有響應(yīng)的線程到底在后臺(tái)做些什么事情懂扼,或者等待著什么資源岁钓。"

摘錄來(lái)自: 周志明. "深入理解Java虛擬機(jī):JVM高級(jí)特性與最佳實(shí)踐(第2版)"。 iBooks.

選項(xiàng) 作用
-F 當(dāng)正常輸出的請(qǐng)求不被響應(yīng)時(shí)微王,強(qiáng)制輸出線程堆棧
-l 除堆棧外,顯示關(guān)于鎖的附加信息
-m 如果調(diào)用到本地方法的話品嚣,可以顯示C/C++ 的堆棧.(JDK9失斂惶取)

visualVM

visualVM 通過(guò)可視化的方式來(lái)和命令行的命令進(jìn)行互補(bǔ),來(lái)分析一些內(nèi)存占用的趨勢(shì)翰撑,一些參數(shù)的動(dòng)態(tài)變化比命令行工具有著先天的優(yōu)勢(shì)罩旋,由于官方文檔比較全面,不再贅述眶诈。

visualVM 官方提供了中文文檔:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末涨醋,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子逝撬,更是在濱河造成了極大的恐慌浴骂,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,366評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件宪潮,死亡現(xiàn)場(chǎng)離奇詭異溯警,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)狡相,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)梯轻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人尽棕,你說(shuō)我怎么就攤上這事揣炕÷媾酰” “怎么了液样?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,689評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵杂彭,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我咳胃,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,925評(píng)論 1 295
  • 正文 為了忘掉前任询张,我火速辦了婚禮,結(jié)果婚禮上浙炼,老公的妹妹穿的比我還像新娘份氧。我一直安慰自己,他們只是感情好弯屈,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,942評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布蜗帜。 她就那樣靜靜地躺著,像睡著了一般资厉。 火紅的嫁衣襯著肌膚如雪厅缺。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,727評(píng)論 1 305
  • 那天宴偿,我揣著相機(jī)與錄音湘捎,去河邊找鬼。 笑死窄刘,一個(gè)胖子當(dāng)著我的面吹牛窥妇,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播娩践,決...
    沈念sama閱讀 40,447評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼活翩,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了翻伺?” 一聲冷哼從身側(cè)響起材泄,我...
    開(kāi)封第一講書(shū)人閱讀 39,349評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎吨岭,沒(méi)想到半個(gè)月后拉宗,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,820評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡辣辫,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,990評(píng)論 3 337
  • 正文 我和宋清朗相戀三年簿废,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片络它。...
    茶點(diǎn)故事閱讀 40,127評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡族檬,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出化戳,到底是詐尸還是另有隱情单料,我是刑警寧澤埋凯,帶...
    沈念sama閱讀 35,812評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站扫尖,受9級(jí)特大地震影響白对,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜换怖,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,471評(píng)論 3 331
  • 文/蒙蒙 一甩恼、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧沉颂,春花似錦条摸、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,017評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至彻坛,卻和暖如春顷啼,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背昌屉。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,142評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工钙蒙, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人间驮。 一個(gè)月前我還...
    沈念sama閱讀 48,388評(píng)論 3 373
  • 正文 我出身青樓仪搔,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親蜻牢。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,066評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容