天天看點

JVM記憶體狀況檢視方法和分析工具

2.jvisualvm

jvisualvm是一個Java虛拟機監控和分析工具,該工具提供了一個圖形界面視窗,并且可以直覺的了解Java應用程式的運作時資訊。jvisualvm內建了許多工具,比如像jmp、jinfo、jstat、jstack、JConsole等。自從JDK 6 Update 7以後已經作為JDK的一部分。## JVM記憶體狀況檢視方法和分析工具 ##

1.jinfo

可以輸出并修改運作時的java 程序的opts。

2.jps

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

3.jstat

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

4.jmap

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

5.jconsole

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

2.jvisualvm

jvisualvm是一個Java虛拟機監控和分析工具,該工具提供了一個圖形界面視窗,并且可以直覺的了解Java應用程式的運作時資訊。jvisualvm內建了許多工具,比如像jmp、jinfo、jstat、jstack、JConsole等。自從JDK 6 Update 7以後已經作為JDK的一部分。

JVM記憶體狀況檢視方法和分析工具

詳細:

在使用這些工具前,先用JPS指令擷取目前的每個JVM程序号,然後選擇要檢視的JVM。

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每三行顯示一下标題。

jmap是一個可以輸出所有記憶體中對象的工具,甚至可以将VM 中的heap,以二進制輸出成文本。

指令:jmap -dump:format=b,file=heap.bin

file:儲存路徑及檔案名

pid:程序編号

•jmap -histo:live pid| less :堆中活動的對象以及大小

•jmap -heap pid : 檢視堆的使用狀況資訊

jinfo:的用處比較簡單,就是能輸出并修改運作時的java程序的運作參數。用法是jinfo -opt pid 如:檢視2788的MaxPerm大小可以用 jinfo -flag MaxPermSize 2788。

jconsole是一個用java寫的GUI程式,用來監控VM,并可監控遠端的VM,非常易用,而且功能非常強。使用方法:指令行裡打 jconsole,選則程序就可以了。

JConsole中關于記憶體分區的說明。

Eden Space (heap): 記憶體最初從這個線程池配置設定給大部分對象。

Survivor Space (heap):用于儲存在eden space記憶體池中經過垃圾回收後沒有被回收的對象。

Tenured Generation (heap):用于保持已經在 survivor space記憶體池中存在了一段時間的對象。

Permanent Generation (non-heap): 儲存虛拟機自己的靜态(refective)資料,例如類(class)和方法(method)對象。Java虛拟機共享這些類資料。這個區域被分割為隻讀的和隻寫的,

Code Cache (non-heap):HotSpot Java虛拟機包括一個用于編譯和儲存本地代碼(native code)的記憶體,叫做“代碼緩存區”(code cache)

•jstack ( 檢視jvm線程運作狀态,是否有死鎖現象等等資訊) : jstack pid : thread dump

•jstat -gcutil pid 1000 100 : 1000ms統計一次gc情況統計100次;

另外推薦一款檢視jmap dump 的記憶體對象工具 MemoryAnalyzer

網址:http://www.eclipse.org/mat/,可以檢視dump時對象數量,記憶體占用,線程情況等。

轉自:http://boendev.iteye.com/blog/882479

http://blog.csdn.net/lc0817/article/details/54980947