天天看點

[轉載]JDK自帶VM分析工具jps,jstat,jmap,jconsole

一、概述  

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

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

二、 使用介紹:  

    1、jstat :我想很多人都是用過unix系統裡的ps指令,這個指令主要是用來顯示目前系統的程序情況,有哪些程序,及其 id。 jps 也是一樣,它的作用是顯示目前系統的java程序情況,及其id号。我們可以通過它來檢視我們到底啟動了幾個java程序(因為每一個java程式都會獨占一個java虛拟機執行個體),和他們的程序号(為下面幾個程式做準備),并可通過opt來檢視這些程序的詳細啟動參數。  

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

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

    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'',就可以了。當然還有其他很好的選項。 

三、參考資料: 

    article:http://elf8848.iteye.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  

轉載位址:http://jiajun.iteye.com/blog/443196,本部落客對其中内容正确與否不負責任,請尊重原作者版權。