新聞中心
你的程序出現(xiàn)了bug?這幾款JVM工具也許可以幫你排查
作者:馮冬冬 2021-01-05 06:42:23
云計算
虛擬化 在平時的開發(fā)當中我們總是會遇到各種各樣的問題,比如說內(nèi)存泄漏、死鎖、CPU等。

成都創(chuàng)新互聯(lián)始終堅持【策劃先行,效果至上】的經(jīng)營理念,通過多達十多年累計超上千家客戶的網(wǎng)站建設總結(jié)了一套系統(tǒng)有效的全網(wǎng)整合營銷推廣解決方案,現(xiàn)已廣泛運用于各行各業(yè)的客戶,其中包括:雨棚定制等企業(yè),備受客戶認可。
在平時的開發(fā)當中我們總是會遇到各種各樣的問題,比如說內(nèi)存泄漏、死鎖、CPU等。遇到問題不可怕,關鍵是我們?nèi)绾稳ヅ挪檫@些錯誤,對癥下藥才是根本。不過對于很多人來說,往往找不到這些問題的根本所在,因此這篇文章主要是讓我們掌握一些工具來分析到底是哪里出現(xiàn)了問題。
在之前的文章中,主要是分析了JVM的內(nèi)存結(jié)構(gòu)、類加載機制和垃圾回收機制。文章的順序也是循序漸進的,從這篇文章當中我們主要是分析JDK自帶的工具,把理論應用于實踐。
首先我們先對幾種要講的工具進行一個概述,然后再分別分析:
首先我們先對幾種要講的工具進行一個概述,然后再分別分析:
一、性能監(jiān)控工具概述
工具主要是為了解決問題而生的,就是由于我們的程序存在著一些性能問題,才有了這些工具。其實當我們在下載完成JDK之后,那些工具就被SUN公司隨之送給我們了。
我們可以在我們的JDK安裝目錄,下看看會有很多這樣的工具。
我們會發(fā)現(xiàn)很多這樣的exe文件,這里面有很多都是性能監(jiān)控工具。我們就抽出來幾個進行講解。
| 工具名稱 | 主要作用 |
|---|---|
| jps(JVM Process Status Tool) | 顯示指定系統(tǒng)中所有的HotSpot虛擬機進程 |
| jstat(JVM Statistics Monitoring Tool) | 收集HotSpot虛擬機各方面的運行數(shù)據(jù) |
| jinfo(Configuration Info for Java) | 顯示虛擬機配置信息 |
| jmap(Memory Map for Java) | 生成虛擬機的內(nèi)存轉(zhuǎn)儲快照(heapdump文件) |
| jhat(JVM Heap Dump Browser) | 分析內(nèi)存轉(zhuǎn)儲快照,不推薦使用,消耗資源而且慢 |
| jstack(Stack Trace for Java) | 顯示虛擬機的線程快照 |
| JConsole | JMX的可視化管理工具 |
| VisualVM | 多合一故障管理工具 |
常見的幾個工具都已經(jīng)列出來了,還有一些其他的工具,其實用起來比JDK自帶的還要好,我會在今后的文章中列出來。OK,我們就一個一個去分析一下這些工具是干嘛的,以及如何去使用的。
二、工具
1、jps:虛擬機進程狀況工具
jps主要用來輸出JVM中運行的進程狀態(tài)信息。語法格式如下:
- jps [options] [hostid]
- 第一個參數(shù):options
- -q 不輸出類名、Jar名和傳入main方法的參數(shù)
- -m 輸出傳入main方法的參數(shù)
- -l 輸出main類或Jar的全限名
- -v 輸出傳入JVM的參數(shù)
- 第二個參數(shù):hostid
主機或者是服務器的id,如果不指定,就默認為當前的主機或者是服務器。
我是在Windows10系統(tǒng)下測試的,當然你可以在linux下試驗,方式是一樣的,結(jié)果可能有不同。你可以選擇不同的參數(shù)選項來進行測試。打開CMD輸入相應命令
2、jstack:堆棧跟蹤工具
jstack用于生成虛擬機當前時刻的線程快照。語法格式如下:
- jstack [option] vmid
- 第一個參數(shù):option
- 選項 作用
- -F 當正常輸出的請求不被相應時候,強制輸出線程堆棧
- -l 出堆棧外,顯示關于鎖的附加信息
- -m 如果調(diào)用本地方法的話,可以顯示C/C++的堆棧
- 第二個參數(shù):vmid
vmid是Java虛擬機ID,在Linux/Unix系統(tǒng)上一般就是進程ID。
我們直接在CMD中操作一下:
3、jstat:虛擬機統(tǒng)計信息監(jiān)控工具
jstat監(jiān)視虛擬機各種運行狀態(tài)信息,可以顯示本地或者是遠程虛擬機進程中的類裝載、內(nèi)存、垃圾收集、JIT編譯等運行數(shù)據(jù)。語法格式如下:
- jstat [ generalOption | outputOptions vmid [interval] [count]] ]
- 第一個參數(shù):generalOption | outputOptions
這個參數(shù)表示的option,代表著用戶希望查詢的虛擬機信息,分為類加載、垃圾收集、運行期編譯狀況3類。
第二個參數(shù):vmid
vmid是Java虛擬機ID,在Linux/Unix系統(tǒng)上一般就是進程ID。
第三個參數(shù):interval
interval是采樣時間間隔,
第四個參數(shù):count
count表示的是采樣數(shù)。
下面我們就是用一下這個工具,打開我們的CMD,輸入相應的命令:
4、jinfo:實時地查看和調(diào)整虛擬機各項參數(shù)
命令格式:
- jinfo [option] pid
第一個參數(shù):option
- 選項 作用
- -v 查看虛擬機啟動時顯示指定的參數(shù)列表
- -flag 查看虛擬機啟動時未被指定的參數(shù)的默認值
- -sysprops 打印虛擬機進程的System.getProperties()的內(nèi)容
第二個參數(shù):pid
指定顯示的進程id。
在CMD中進行測試:
5、jmap:生成虛擬機的內(nèi)存轉(zhuǎn)儲快照(heapdump文件)
jmap(Memory Map for Java,內(nèi)存映像工具),用于生成堆轉(zhuǎn)存的快照,一般是heapdump或者dump文件。如果不適用jmap命令,可以使用-XX:+HeapDumpOnOutOfMemoryError參數(shù),當虛擬機發(fā)生內(nèi)存溢出的時候可以產(chǎn)生快照?;蛘呤褂胟ill -3 pid也可以產(chǎn)生。jmap的作用并不僅僅是為了獲取dump文件,它可以查詢finalize執(zhí)行隊列,java堆和永久代的詳細信息,如空間使用率,當前用的哪種收集器。命令格式如下:
- jmap [option] vmid
第一個參數(shù):
第二個參數(shù):vmid
vmid是Java虛擬機ID,在Linux/Unix系統(tǒng)上一般就是進程ID.
在cmd中測試:
6、jhat:分析內(nèi)存轉(zhuǎn)儲快照,不推薦使用,而且慢
由于這個工具功能比較簡陋,運行起來也比較耗時,所以這個工具不推薦使用,推薦使用MAT。
7、JConsole:JMX的可視化管理工具
這個工具相比較前面幾個工具,使用率比較高,很重要。它是一個java GUI監(jiān)視工具,可以以圖表化的形式顯示各種數(shù)據(jù)。并可通過遠程連接監(jiān)視遠程的服務器VM。用java寫的GUI程序,用來監(jiān)控VM,并可監(jiān)控遠程的VM,非常易用,而且功能非常強。
在cmd里面輸入 jconsole,選則進程就可以了。(前提是在IDE工具先建立一個線程運行著)
然后我們選擇了相應的選項之后,進入這個工具就會出現(xiàn)下面這個界面
在上面有菜單,我們可以選擇其中一個進行查看,就可以了,這個用具用起來很方便,也是我之前用的比較多的工具。
8、VisualVM:多合一故障管理工具
這個工具也很牛bility。它同jconsole都是一個基于圖形化界面的、可以查看本地及遠程的JAVA GUI監(jiān)控工具,Jvisualvm同jconsole的使用方式一樣,直接在命令行打入jvisualvm即可啟動,jvisualvm界面更美觀一些,數(shù)據(jù)更實時:
最上面也有菜單,你可以選擇不同的選項來展示。自己動手試一遍是最好的。
三、總結(jié)
這些工具就先寫這么多,在文章一開始我們其實已經(jīng)發(fā)現(xiàn)了,jdk自帶的工具那是超級的多,而且隨著jdk版本的不斷更新,工具還有不斷加強增多的趨勢,想要每一個都掌握那太費時間了,我們遇到哪些問題去搜索一下,看看能用到哪些工具就可以了,列出的這幾種工具,對于初學者來說還是比較適用的。
本文轉(zhuǎn)載自微信公眾號「愚公要移山」,可以通過以下二維碼關注。轉(zhuǎn)載本文請聯(lián)系愚公要移山公眾號。
網(wǎng)站名稱:你的程序出現(xiàn)了bug?這幾款JVM工具也許可以幫你排查
本文來源:http://m.fisionsoft.com.cn/article/dhgecos.html


咨詢
建站咨詢
