JDK本身提供了很多友善的JVM性能調優監控工具,除了內建式的VisualVM和jConsole,還有jps,jmap,jstat,jstack,jhat等小工具。
1. jps(Java Virtual Machine Process Status Tool)
jps -m -l 列出JVM中運作的程序狀态資訊(這裡可以擷取某個程序的pid, 供後續指令使用)
2. jstat
jstat -gcutil pid 10s 3 對堆記憶體的使用情況、gc資訊等進行實時的指令行統計
3. jstack
檢視某個Java程序内的線程堆棧資訊。
jstack可以定位到線程堆棧,根據堆棧資訊我們可以定位到具體代碼,是以它在JVM性能調優中使用得非常多。
使用方法參見:6. 熱點CPU
4. jmap
生成堆記憶體快照
jmap -heap pid 檢視程序堆記憶體資訊,了解即可
jmap -dump:format=b,file=xxx.hprof pid 把程序記憶體使用情況dump到檔案中。Dump檔案是程序的記憶體鏡像
jmap -dump:live,format=b,file=xxx.hprof pid 統計存活的對象資訊
dump出來的檔案可以用MAT、VisualVM等工具檢視,也可以用jhat檢視
5. jhat
檢視dump出來的檔案
jhat -port 9998 xxx.hprof
然後就可以在浏覽器中輸入主機位址:9998檢視了,比如:http://localhost:9998
不推薦,因為有的檔案很大,打開會很慢,看起來也費勁,推進用MAT分析
6. 熱點cpu
cpu占用率持續的比較高
定位步驟:
jps -m -l 列出正在運作的程序----這裡是否用top指令更好一些?top才能看出誰占用cpu最高
top -H -p pid 找出該程序内最耗費cpu的線程
printf "%x\n" tid 線程id轉化為16進制