jmap:列印出某個java程序(使用pid)記憶體内的,所有‘對象’的情況(如:産生那些對象,及其數量)。
接下來是對這些工具的詳細介紹:
從最簡單的jps工具開始:我想很多人都是用過unix系統裡的ps指令,這個指令主要是用來顯示目前系統的程序情況,有哪些程序,及其id。jps 也是一樣,它的作用是顯示目前系統的java程序情況,及其id号。我們可以通過它來檢視我們到底啟動了幾個java程序(因為每一個java程式都會獨占一個java虛拟機執行個體),和他們的程序号(為下面幾個程式做準備),并可通過opt來檢視這些程序的詳細啟動參數。
使用方法:在目前指令行下打 jps(需要JAVA_HOME,沒有的話,到改程式的目錄下打)
接下來是jstat,我之是以這次調優Liferay portal是因為,liferay在預設的情況下,并發使用者一多就會産生perm out of momery異常。雖然很開就解決了,但發現對VM記憶體使用量監控的重要性。通過google,很快的發現了jstat這個工具。
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 -gcnew pid:new對象的資訊。
jstat -gcnewcapacity pid:new對象的資訊及其占用量。
jstat -gcold pid:old對象的資訊。
jstat -gcoldcapacity pid:old對象的資訊及其占用量。
jstat -gcpermcapacity pid: perm對象的資訊及其占用量。
jstat -gcutil pid:統計gc資訊統計。
jstat -printcompilation pid:目前VM執行的資訊。
除了以上一個參數外,還可以同時加上 兩個數字,如:jstat -printcompilation 3024 250 6是每250毫秒列印一次,一共列印6次,還可以加上-h3每三行顯示一下标題。
jmap是一個可以輸出所有記憶體中對象的工具,甚至可以将VM 中的heap,以二進制輸出成文本。使用方法 jmap -histo pid。如果連用SHELL jmap -histo pid>a.log可以将其儲存到文本中去,在一段時間後,使用文本對比工具,可以對比出GC回收了哪些對象。jmap -dump:format=b,file=String 3024可以将3024程序的記憶體heap輸出出來到String檔案裡。
jinfo:的用處比較簡單,就是能輸出并修改運作時的java程序的運作參數。用法是jinfo -opt pid 如:檢視2788的MaxPerm大小可以用 jinfo -flag MaxPermSize 2788。
jstack 2083
jconsole是一個用java寫的GUI程式,用來監控VM,并可監控遠端的VM,非常易用,而且功能非常強。由于是GUI程式,這裡就不詳細介紹了,不會的地方可以參考SUN的官方文檔。
使用方法:指令行裡打 jconsole,選則程序就可以了。
以下是這些工具的SUN官方說明:
jps:http://java.sun.com/j2se/1.5.0/docs/t