常用有五個命令行工具:
jinfo:
可以輸出並修改運行時的java
進程的opts
。
jps:
與unix
上的ps
類似,用來顯示本地的java
進程,可以查看本地運行着幾個java
程序,並顯示他們的進程號。
jstat:
一個極強的監視VM
內存工具。可以
用來監視VM
內存內的各種堆和非堆的大小及其內存使用量。
jmap:
打印出某個java
進程(使用pid
)內存內的,所有‘對象’的情況(如:產生那些對象,及其數量)。
jconsole:
一個java
GUI
監視工具,可以以圖表化的形式顯示各種數據。並可通過遠程連接監視遠程的服務器VM
。
接下 來是對這些工具的詳細介紹:
從最
簡單的jstat
工具開始:我想很多人都是用過unix
系統裏的ps
命令,這個命令主要是用來顯示當前系統的進程情況,有哪些進程,及其id
。 jps
也是一樣,它的作用是顯示當前系統的java
進程情況,及其id
號。
我們可以通過它來查看我們到底啓動了幾個java
進程(因爲每
一個java
程序都會獨 佔一個java
虛擬機實例),和他們的進程號(爲下面幾個程序做準備),並可通過opt
來查看這些進程的詳細啓動參數。
使用方法:在當前命令行下打 jps(
需要JAVA_HOME
,沒有的話,到改程序的目錄下打)
接下
來是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 -gcutil pid:
統計gc
信息
統計。
jstat -gccause
pid:統計gc信息,並顯示最後一次引發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 。
jconsole
是一個用java
寫的GUI
程序,用來監控VM
,
並可監控遠程的VM
,非常易用,而且功能非常強。由於是GUI
程序,這裏就不詳細介紹了,不會的地方可以參考SUN的官方文檔。
使用方法:命令行裏打 jconsole
,選則進程就可以了。
以下
是這些工具的SUN
官方說明:
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