在JDK的命令行中糖儡,一般開發(fā)人員最耳熟能詳?shù)目隙ň褪莏ava,javac,javap等常用命令厌漂,不過在jdk/bin下還有許多其他的命令行工具顿苇,它們被用來監(jiān)測(cè)JVM運(yùn)行時(shí)的狀態(tài)睦袖,下面我們來詳細(xì)解讀一下幾個(gè)常用的工具以及如何使用鳍咱。
jhat
jhat(JVM Heap Analysis Tool)命令是與jmap搭配使用,用來分析jmap生成的dump措嵌,jhat內(nèi)置了一個(gè)微型的HTTP/HTML服務(wù)器躲叼,生成dump的分析結(jié)果后,可以在瀏覽器中查看企巢。在此要注意,一般不會(huì)直接在服務(wù)器上進(jìn)行分析浪规,因?yàn)閖hat是一個(gè)耗時(shí)并且耗費(fèi)硬件資源的過程或听,一般把服務(wù)器生成的dump文件復(fù)制到本地或其他機(jī)器上進(jìn)行分析。
命令格式
jhat [dumpfile]
示例
$ jhat -J-Xmx512m dump.hprof
eading from dump.hprof...
Dump file created Fri Mar 11 17:13:42 CST 2016
Snapshot read, resolving...
Resolving 271678 objects...
Chasing references, expect 54 dots......................................................
Eliminating duplicate references......................................................
Snapshot resolved.
Started HTTP server on port 7000
Server is ready.
中間的-J-Xmx512m是在dump快照很大的情況下分配512M內(nèi)存去啟動(dòng)HTTP服務(wù)器,運(yùn)行完之后就可在瀏覽器打開Http://localhost:7000進(jìn)行快照分析
堆快照分析主要在最后面的Heap Histogram里葱峡,里面根據(jù)class列出了dump的時(shí)候所有存活對(duì)象训柴。
高能tips
分析同樣一個(gè)dump快照,MAT需要的額外內(nèi)存比jhat要小的多的多足丢,所以建議使用MAT來進(jìn)行分析,當(dāng)然也看個(gè)人偏好庇配。