使用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埠來檢視。
訪問 http://localhost:7000 ,能看到jmap解析結果。
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
- JVM監控工具:jps、jstat、jinfo、jmap、jhat、jJVMJS
- Docker 之 執行狀態監控Docker
- MySQL MHA 執行狀態監控MySql
- 使用 Prometheus 監控 eKuiper 規則執行狀態PrometheusUI
- 乾貨:教你如何監控 Java 執行緒池執行狀態Java執行緒
- 使用JDK自帶的VisualVM進行Java程式的效能分析JDKLVMJava
- 利用superlance監控supervisor執行狀態
- 監控 SQL Server 的執行狀況SQLServer
- 故障分析 | Federated 儲存引擎表導致監控執行緒處於 Opening table 狀態儲存引擎執行緒
- Java執行緒的狀態Java執行緒
- 執行緒池監控2-監控執行緒池狀態、執行緒數量和佇列任務數量等執行緒佇列
- Java 監控基礎 - 使用 JMX 監控和管理 Java 程式Java
- 基於websocket的celery任務狀態監控Web
- Windows 2003自帶效能監控工具的使用Windows
- 使用JDK自帶的工具jstack找出造成執行程式死鎖的原因JDKJS行程
- Java命令列監控工具(jmap,jstack,jstat,jinfoJava命令列JS
- Elastic 使用Heartbeat監測服務執行狀態AST
- 【Java】執行緒的 6 種狀態Java執行緒
- Java 執行緒的5種狀態Java執行緒
- java執行緒的狀態+鎖分析Java執行緒
- jProfiler遠端連線Linux監控jvm、tomcat執行狀態LinuxJVMTomcat
- Java的六種執行緒狀態及程式碼示例Java執行緒
- 使用Nagios打造專業的業務狀態監控iOS
- WGLCOUD 使用手冊 - 監控攝像頭的狀態
- 煤礦皮帶執行狀態監測預警系統
- Java命令列監控工具(jmap,jstack,jstat,jinfo,jps)Java命令列JS
- Linux如何檢視系統和程式的執行狀態?Linux
- Java生產環境效能監控與調優—基於JDK命令列工具的監控JavaJDK命令列
- java執行緒的五大狀態,阻塞狀態詳解Java執行緒
- Java多執行緒-執行緒狀態Java執行緒
- 案例五:shell指令碼實現定時監控http服務的執行狀態指令碼HTTP
- 如何透過手機APP線上監控西門子PLC的執行狀態APP
- java自帶的四種執行緒池Java執行緒
- 執行緒狀態和鎖執行緒
- Java執行緒狀態轉換Java執行緒
- 監控 Python 記憶體使用情況和程式碼執行時間!Python記憶體