使用JDK自帶的jmap和jhat監控處於執行狀態的Java程式
對於處於執行狀態中的Java程式,JDK自帶了很多工具,允許Java開發人員監控執行程式中的各種狀態,比如該程式內部建立了多少個物件例項,消耗了多少記憶體,等等。
本文基於JDK1.8而寫成。
我下面寫了一個最簡單的Java類,包含了一個無限迴圈,每隔5秒增加一個計數器的值。
package jmap;class Tool{ private int count = 0; public void Run() throws InterruptedException{ while(true){ System.out.println("Hello: " + this.count++); Thread.sleep(5000); } } }public class JMapTest { public static void main(String[] args) throws InterruptedException { Tool tool = new Tool(); tool.Run(); } }
在Eclipse裡執行這個應用。
下面介紹如何使用jmap和jhat監控這個執行程式。
1. 首先取得這個Java執行程式的ID:15392。我是直接用Windows自帶的工作管理員獲得程式ID的。
使用JDK自帶的jmap和jhat監控處於執行狀態的Java程式
2. 使用如下命令列:
jmap -dump:format=b,file=c:\temp\heapstatus.bin 15392
jmap是JDK提供的工具,位於JDK安裝目錄的bin資料夾下。
執行命令列,會產生一個heap dump檔案: headstatus.bin
3. 現在可以用另一個JDK工具,jhat來讀取這個dump檔案並解析。使用命令列:
jhat c:\temp\heapstatus.bin
解析完畢後,jhat列印出的輸出提示我們Snapshot resolved,可以從本地伺服器的7000埠來檢視。
localhost:7000 in browser:
點選超連結“jmap Tool”進入明細:下圖意思是我的Tool類的例項@0x7166babd8的成員變數,即計數器的值已經累加到49了。
4. 如果大家不喜歡命令列,也可以用一個Eclipse的外掛,MAT – Memory Analyzer Tool,也能完成和jmap與jhat命令同樣的功能。
這個外掛安裝後,在Eclipse裡會多出一個檢視:
直接將jmap生成的heap dump檔案拖到MAT檢視裡,就能自動解析並顯示結果了。
點按鈕“Find object by address”:
同樣能夠看到之前在localhost:7000裡看到的物件例項的明細:
You can get the same result as you get previously in
要獲取更多Jerry的原創技術文章,請關注公眾號"汪子熙"或者掃描下面二維碼:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24475491/viewspace-2212823/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 使用JDK工具jmap和jhat監控Java程式JDKJava
- Java JDK目錄下的jmap和jhat工具的使用方式JavaJDK
- memcached的執行狀態監控
- JVM監控工具:jps、jstat、jinfo、jmap、jhat、jJVMJS
- Docker 之 執行狀態監控Docker
- MySQL MHA 執行狀態監控MySql
- 使用 Prometheus 監控 eKuiper 規則執行狀態PrometheusUI
- 乾貨:教你如何監控 Java 執行緒池執行狀態Java執行緒
- java虛擬機器記憶體監控工具jps,jinfo,Jstack,jstat,jmap,jhat使用Java虛擬機記憶體JS
- 利用superlance監控supervisor執行狀態
- 利用btrace線上監控java程式狀態Java
- 使用JDK自帶的VisualVM進行Java程式的效能分析JDKLVMJava
- JVM效能調優監控工具——jps、jstack、jmap、jhat、jstat、hprof使用詳解JVMJS
- MySQL執行狀態監控(pt-mysql-summary)MySql
- oracle資料庫執行狀態監控SHELLOracle資料庫
- 監控 SQL Server 的執行狀況SQLServer
- Java執行緒的狀態Java執行緒
- 故障分析 | Federated 儲存引擎表導致監控執行緒處於 Opening table 狀態儲存引擎執行緒
- 監控SQL Server的執行狀況(1)SQLServer
- 執行緒池監控2-監控執行緒池狀態、執行緒數量和佇列任務數量等執行緒佇列
- 基於websocket的celery任務狀態監控Web
- 監控Nginx的工作狀態Nginx
- Java 監控基礎 - 使用 JMX 監控和管理 Java 程式Java
- Java——命令jps、jstat、jmap、jstack、jhat、jinfoJavaJS
- 自己開發的MYMON工具監控MYSQL執行狀態幫助文件MySql
- Jvm自帶監控命令實戰[base jdk8]JVMJDK
- 通過監控執行緒狀態來保證socket伺服器的穩定執行執行緒伺服器
- Elastic 使用Heartbeat監測服務執行狀態AST
- Java 執行緒的5種狀態Java執行緒
- 【Java】執行緒的 6 種狀態Java執行緒
- java執行緒的狀態+鎖分析Java執行緒
- JAVA 執行緒的幾種狀態Java執行緒
- 使用Nagios打造專業的業務狀態監控iOS
- Java的六種執行緒狀態及程式碼示例Java執行緒
- 使用JDK自帶的工具jstack找出造成執行程式死鎖的原因JDKJS行程
- Java執行緒池中執行緒的狀態簡介Java執行緒
- 如何透過手機APP線上監控西門子PLC的執行狀態APP
- Java生產環境效能監控與調優—基於JDK命令列工具的監控JavaJDK命令列