天天看點

JDK自帶VM分析工具jps,jstat,jmap,jconsole

一、概述

    SUN 的JDK中的幾個工具,非常好用。秉承着有免費,不用商用的原則。以下簡單介紹一下這幾種工具。(注:本文章下的所有工具都存在JDK5.0以上版本的工具集裡,同javac一樣,不須特意安裝) 。

    我一共找到以下四個工具:重點看看jconsole和jmap。

1.jps                

.:與unix上的ps類似,用來顯示本地的java程序,可以檢視本地運作着幾個java程式,并顯示他們的程序号。                    

2.jstat                

.:一個極強的監視VM記憶體工具。可以用來監視VM記憶體内的各種堆和非堆的大小及其記憶體使用量。                    

3.jmap                

.:列印出某個java程序(使用pid)記憶體内的,所有‘對象’的情況(如:産生那些對象,及其數量)。                    

4.jconsole                

.:一個java GUI監視工具,可以以圖表化的形式顯示各種資料。并可通過遠端連接配接監視遠端的伺服器VM。    

二、 使用介紹:

    1、jps

:我想很多人都是用過unix系統裡的ps指令,這個指令主要是用來顯示目前系統的程序情況,有哪些程序,及其 id。 jps

也是一樣,它的作用是顯示目前系統的java程序情況,及其id号。我們可以通過它來檢視我們到底啟動了幾個java程序(因為每一個java程式都會獨

占一個java虛拟機執行個體),和他們的程序号(為下面幾個程式做準備),并可通過opt來檢視這些程序的詳細啟動參數。

    使用方法:在目前指令行下打 jps(需要JAVA_HOME,沒有的話,到改程式的目錄下打) 。

可惜沒有linux下的ps好用,名稱不好用。但是在第四個工具jconsole的界面裡面會有具體JAR包的名稱。

JDK自帶VM分析工具jps,jstat,jmap,jconsole

/data/jdk1.6.0_06/bin/jps    

JDK自帶VM分析工具jps,jstat,jmap,jconsole

6360 Resin

JDK自帶VM分析工具jps,jstat,jmap,jconsole

6322 WatchdogManager

JDK自帶VM分析工具jps,jstat,jmap,jconsole

2466 Jps

    2、jstat :對VM記憶體使用量進行監控。

    jstat工具特别強大,有衆多的可選項,詳細檢視堆内各個部分的使用量,以及加載類的數量。使用時,需加上檢視程序的程序id,和所選參數。以下詳細介紹各個參數的意義。

    jstat -class pid:顯示加載class的數量,及所占空間等資訊。

    jstat -compiler pid:顯示VM實時編譯的數量等資訊。

    jstat -gc pid:可以顯示gc的資訊,檢視gc的次數,及時間。其中最後五項,分别是young gc的次數,young gc的時間,full gc的次數,full gc的時間,gc的總時間。

    jstat

-gccapacity:可以顯示,VM記憶體中三代(young,old,perm)對象的使用和占用大小,如:PGCMN顯示的是最小perm的記憶體使

用量,PGCMX顯示的是perm的記憶體最大使用量,PGC是目前新生成的perm記憶體占用量,PC是但前perm記憶體占用量。其他的可以根據這個類推,

OC是old内純的占用量。

    jstat -gcnew pid:new對象的資訊。

    jstat -gcnewcapacity pid:new對象的資訊及其占用量。

    jstat -gcold pid:old對象的資訊。

    jstat -gcoldcapacity pid:old對象的資訊及其占用量。

    jstat -gcpermcapacity pid: perm對象的資訊及其占用量。

    jstat -util pid:統計gc資訊統計。

    jstat -printcompilation pid:目前VM執行的資訊。

    除了以上一個參數外,還可以同時加上 兩個數字,如:jstat -printcompilation 3024 250 6是每250毫秒列印一次,一共列印6次,還可以加上-h3每三行顯示一下标題。

   3、jmap 是一個可以輸出所有記憶體中對象的工具,甚至可以将VM 中的heap,以二進制輸出成文本。使用方法 jmap -histo pid。如果連用 SHELL jmap -histo pid>a.log可以将其儲存到文本中去(windows下也可以使用),在一段時間後,使用文本對比工具,可以對比出GC回收了哪些對象。jmap -dump:format=b,file=f1 3024可以将3024程序的記憶體heap輸出出來到f1檔案裡。

    4、jconsole 是一個用java寫的GUI程式,用來監控VM,并可監控遠端的VM,非常易用,而且功能非常強。由于是GUI程式,這裡就不詳細介紹了,不會的地方可以參考SUN的官方文檔。

    使用方法:指令行裡打 jconsole,選則程序就可以了。

友好提示:windows檢視程序号,由于任務管理器預設的情況下是不顯示程序id号的,是以可以通過如下方法加上。ctrl+alt+del打開任務管

理器,選擇‘程序’頁籤,點‘檢視’->''選擇列''->加上''PID'',就可以了。當然還有其他很好的選項。

執行個體:

jmap -histo:live $pid

jmap -histo $pid

jstack -l $pid

三、參考資料:

    article:http://elf8848.javaeye.com/blog/442806

    jps:http://java.sun.com/j2se/1.5.0/docs/tooldocs/share/jps.html

    jstat:http://java.sun.com/j2se/1.5.0/docs/tooldocs/share/jstat.html

    jmap:http://java.sun.com/j2se/1.5.0/docs/tooldocs/share/jmap.html

    jconsole:http://java.sun.com/j2se/1.5.0/docs/guide/management/jconsole.html