原文:https://my.oschina.net/wangmengjun/blog/864838
本文繼續介紹Java自帶的性能監測工具,本文使用jhat (Java Heap Analyse Tool)工具來玩~
jhat (Java Heap Analyse Tool) 是用來分析java堆的命令,可可以將對中的對象以html的形式展示,包括對象的數量、大小等信息,並支持對象查詢語言 (OQL)。
先使用jps -l查看有哪些進程~
[root@dev03 ~]# jps -l
10838 sun.tools.jps.Jps
13823 org.apache.hadoop.hdfs.server.namenode.NameNode
13588 org.apache.hadoop.yarn.server.nodemanager.NodeManager
21983 org.apache.catalina.startup.Bootstrap
13941 org.apache.hadoop.hdfs.server.datanode.DataNode
13318 org.apache.hadoop.yarn.server.resourcemanager.ResourceManager
14097 org.apache.hadoop.hdfs.server.namenode.SecondaryNameNode
手動為PID為21983的進程生成堆快照文件~
[root@dev03 ~]# jmap -dump:format=b,file=/srv/heap.hprof 21983
Dumping heap to /srv/heap.hprof ...
Heap dump file created
然后,使用jhat打開生成的heap.hprof文件~ 如,
[root@dev03 ~]# jhat /srv/heap.hprof
Reading from /srv/heap.hprof...
Dump file created Wed Mar 22 10:41:26 CST 2017
Snapshot read, resolving...
Resolving 526703 objects...
Chasing references, expect 105 dots.........................................................................................................
Eliminating duplicate references.........................................................................................................
Snapshot resolved.
Started HTTP server on port 7000
Server is ready.
jhat在分析完成后,使用HTTP服務器展示其分析結果。訪問地址為http://<IP>:7000,可以看到類似如下的內容:
將頁面拖到最下面,“Other Queries”一欄~
在“Other Queries”一欄中點擊不同的鏈接可以展示不同的內容,如
點擊“Show heap histogram” 鏈接,展示堆快照直方圖~
點擊“Execute Object Query Language (OQL) query”鏈接,可以使用OQL查詢~
OQL查詢語法與Visual VM的OQL類似~ 基本語法如下:
select <JavaScript expression to select>
[ from [instanceof] <class name> <identifier>
[ where <JavaScript boolean expression to filter> ] ]
可以點擊此連接(oqlhelp.html)獲取Visual VM OQL更多信息~
如,”獲取所有ClassLoader類的名字“的OQL查詢如下:
select classof(cl).name from instanceof java.lang.ClassLoader cl
查詢結果如下: