1. 程式人生 > >檢視記憶體情況

檢視記憶體情況

jinfo:可以輸出並修改執行時的java 程序的opts。 
jps:與unix上的ps類似,用來顯示本地的java程序,可以檢視本地執行著幾個java程式,並顯示他們的程序號。 
jstat:一個極強的監視VM記憶體工具。可以用來監視VM記憶體內的各種堆和非堆的大小及其記憶體使用量。 
jmap:打印出某個java程序(使用pid)記憶體內的所有'物件'的情況(如:產生那些物件,及其數量)。 
jconsole:一個java GUI監視工具,可以以圖表化的形式顯示各種資料。並可通過遠端連線監視遠端的伺服器VM。 

詳細:在使用這些工具前,先用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 <pid> 
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時物件數量,記憶體佔用,執行緒情況等。