Java分析工具

[b]1、jps[/b]:類似unix系統裏的ps命令,這個命令主要是用來顯示當前系統的進程情況,有哪些進程,及其 id。 jps 也是一樣,它的作用是顯示當前系統的java進程情況,及其id號。我們可以通過它來查看我們到底啓動了幾個java進程和他們的進程號(爲下面幾個程序做準備),並可通過opt來查看這些進程的詳細啓動參數。
使用方法:在當前命令行下打 jps(需要JAVA_HOME,沒有的話,到改程序的目錄下打) 。

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

[b]2、jstat[/b]:一個極強的監視VM內存工具。可以用來監視VM內存內的各種堆和非堆的大小及其內存使用量。
jstat工具特別強大,有衆多的可選項,詳細查看堆內各個部分的使用量,以及加載類的數量。使用時,需加上查看進程的進程id,和所選參數。以下詳細介紹各個參數的意義。
jstat -class pid:顯示加載class的數量,及所佔空間等信息。

# jstat -class 25917

Loaded Bytes Unloaded Bytes Time

2629 2916.8 29 24.6 0.90

jstat -compiler pid:顯示VM實時編譯的數量等信息。
# jstat -compiler 25917

Compiled Failed Invalid Time FailedType FailedMethod

768 0 0 0.70 0

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

[b]3、jmap[/b] 是一個可以輸出所有內存中對象的工具,甚至可以將VM 中的heap,以二進制輸出成文本。使用方法 jmap -histo pid。如果連用 SHELL jmap -histo pid>a.log可以將其保存到文本中去(windows下也可以使用),在一段時間後,使用文本對比工具,可以對比出GC回收了哪些對象。 jmap -dump:format=b,file=f1 3024可以將3024進程的內存heap輸出出來到f1文件裏。

[b]4、jconsole[/b] 是一個用java寫的GUI程序,用來監控VM,並可監控遠程的VM,非常易用,而且功能非常強。由於是GUI程序,這裏就不詳細介紹了,不會的地方可以參考SUN的官方文檔。
使用方法:命令行裏打 jconsole,選則進程就可以了。
提示:windows查看進程號,由於任務管理器默認的情況下是不顯示進程id號的,所以可以通過如下方法加上。ctrl+alt+del打開任務管 理器,選擇‘進程’選項卡,點‘查看’->''選擇列''->加上''PID'',就可以了。當然還有其他很好的選項。

[b]5、ThreadDump[/b]
在Windows中,是在JVM運行的控制檯窗口中按下Ctrl-Break。對基於Linux和Unix的系統,則用kill命令將SIGQUIT發送到JVM。這可以通過命令kill – 3 完成,這裏的pid是JVM的進程ID
提示:a.最好重定向到一個文件裏。
b.爲了避免關閉telnet的TERM信號量可以使用nohup

[b]6、JProfilor[/b]
在監測端的Jprofile,其設置沒有多大的改變,也是按照嚮導,選擇更多不同的選項而已。
(遠程)被監測端的配置:
(1) 將以下啓動參數加入到Java應用的 "Java Runtime Parameters" 中
-Xrunjprofiler:port=8849 -Xbootclasspath/a:E:/PROGRA~1/JPROFI~1/bin/agent.jar

簡單地說,就是在啓動Java應用的命令行裏面加上以上參數。
port=8849,這個端口就是Jprofile裏面設置監聽的遠程端口, 其必須要與Jprofile裏面的設置保持一致。另外,agent.jar這個文件應該是位於Jprofile安裝目錄的bin目錄下(對應被監測端的路 徑)。對於目錄過長或者帶空格的,要注意轉換爲8位長度的寫法,不然可能會找不到路徑(windows系統有此問題)。

(2) 將Jprofile安裝路徑下的bin\windows 增加到Path環境變量中
E:\Program Files\jprofiler5\bin\windows

注意,這個路徑應該是Jprofile安裝路徑下的bin\windows(不同系統對應不用的目錄,unix、linux對應的不一樣。bin\unix或bin\linux。沒用過這兩個版本)

兩邊配置完成後,就可以啓動被監測的Java應用和Jprofile,一會就可以在Jprofile上看到監測數據了。這就是使用Jprofile進行監測的大致步驟,不同的使用模式配置步驟沒有區別。


Jprofile的幾種監測模式
Jprofile提供3中監測模式,分別是等待模式,非等待模式,離線模式。

等待模式:在等待模式中,被監測的Java應用,需要等待Jprofile連接上,纔會繼續其啓動過程,不然該啓動過程會被掛起,處於等待Jprofile連接中。
使用該模式的方法是,在Jprofile配置session時,選擇該模式,然後在被監測的Java應用啓動參數中,加入:
-Xrunjprofiler:port=8849 -Xbootclasspath/a:E:/PROGRA~1/JPROFI~1/bin/agent.jar

非等待模式:被監測的Java應用不會等待Jprofile的連接而直接啓動,Jprofile在需要時再啓動。
使用該模式的方法是,在Jprofile配置session時,選擇該模式,然後在被監測的Java應用啓動參數中,加入:
-Xrunjprofiler:port=8849,nowait,id=116,config=E:/DOCUME~1/ADMINI~1/JPROFI~1/config.xml -Xbootclasspath/a:E:/PROGRA~1/JPROFI~1/bin/agent.jar

離線模式:被監測的Java應用不會等待Jprofile的連接而直接啓動,同時監測數據會在服務器端緩存,在Jprofile連接時,將其返回給Jprofile。
使用該模式的方法是,在Jprofile配置session時,選擇該模式,然後在被監測的Java應用啓動參數中,加入:
-Xrunjprofiler:offline,id=116,config=E:/DOCUME~1/ADMINI~1/JPROFI~1/config.xml -Xbootclasspath/a:E:/PROGRA~1/JPROFI~1/bin/agent.jar

這裏要注意的兩個地方是:id=116,這個是Jprofile中設定的監測session的id,而config=E:/DOCUME~1/ADMINI~1/JPROFI~1/config.xml則 是包含該session的Jprofile配置文件(如果你的session是在監測端配置的,那麼你必須將監測端的這個config文件同步到被監測端 上,否則被監測端將因爲找不到你指定的sessionId而提示錯誤)。上面的啓動參數的路徑都應該是被監測端的路徑。


WAS服務器的遠程監測設置
1.配置Jprofile,創建一個監測遠程服務器的session。如果使用嚮導,選擇了WebSphere服務器的,可能需要提供該服務器的 server.xml文件和startServer.bat啓動腳本文件。這時你去服務器那裏,把這個兩個文件,放到監測端的機器上,然後填入對應的路徑 就好了。當session創建完成後,再將這兩個文件複製回被監測端的服務器上。
其實Jprofile需要這兩個文件的原因是因爲它會自動幫你修 改這兩個文件,使WAS server的啓動環境符合Jprofile的設置,免了你手動設置的麻煩。如果你使用的WebSphere單服務器版還好,若是網絡部署版,手動修改服 務器的config是很危險的。對於這種情況,我的做法是到被監測端的服務器拿這兩個文件到監測端,但不將修該後的文件放回被監測端的服務器,而改用手動 配置WAS server。

2.設置WAS服務器的啓動參數
在Application servers > server1 > Process Definition > Java Virtual Machine 的 Generic JVM arguments 中加入上面提到的Jprofile模式的參數。

3.設置WAS 所在的機器的Path環境變量
在被監測端的Path環境變量中,加入E:\Program Files\jprofiler5\bin\windows(注意修改爲服務器上Jprofile對應的路徑)

4.禁用WAS server對應的windows service,如果將WAS server註冊爲windows的話。(有時不禁用它也可以正常對server進行監測,如果禁用了,就不能再從DM Console上對它進行啓動了。)

5.同步監測端和被監測端的Jprofile config.xml文件

6.重啓該WAS server.(如果在DM Consol中啓動失敗。嘗試在命令行,使用腳本啓動)

7.啓動Jprofile,打開設置好的session

8.這時你應該看到監測數據
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章