相關命令
jps命令
java提供的一個顯示當前所有java進程pid的命令
參數(shù):
-q:只顯示pid
-m:輸出傳遞給main方法的參數(shù)
-l:輸出應用程序main class的完整package名或者應用程序的jar文件完整路徑名
-v:顯示JVM參數(shù)</pre>
參考鏈接:
Java命令學習系列(一)——Jps-HollisChuang's Blog
jstat命令

# 垃圾回收統(tǒng)計
jstat -gc pid 250 20:查詢進程xxx的垃圾收集情況,每250毫秒查詢一次,一個查詢20次。
S0C:第一個幸存區(qū)的大小
S1C:第二個幸存區(qū)的大小
S0U:第一個幸存區(qū)的使用大小
S1U:第二個幸存區(qū)的使用大小
EC:伊甸園區(qū)的大小
EU:伊甸園區(qū)的使用大小
OC:老年代大小
OU:老年代使用大小
MC:方法區(qū)大小
MU:方法區(qū)使用大小
CCSC:壓縮類空間大小
CCSU:壓縮類空間使用大小
YGC:年輕代垃圾回收次數(shù)
YGCT:年輕代垃圾回收消耗時間
FGC:老年代垃圾回收次數(shù)
FGCT:老年代垃圾回收消耗時間
GCT:垃圾回收消耗總時間
jstat -gcutil pid 250 20:查詢GC總體使用情況(百分比)
jstat -gccause pid:額外輸出上次GC原因
特別的:
Allocation Failure:
表明本次引起GC的原因是因為在年輕代中沒有足夠的空間能夠存儲新的數(shù)據(jù)了。
jinfo命令(jdk8后官方拋棄)
可以用來查看正在運行的java應用程序的擴張參數(shù),包括java system屬性和JVM命令行參數(shù),也可以動態(tài)的修改正在運行的JVM的一些參數(shù)。
| 用法 | 說明 | 舉例 |
|---|---|---|
| jinfo pid | 輸出當前JVM進程的全部參數(shù)和系統(tǒng)屬性 | jinfo 11772 |
| jinfo -flag name pid | 輸出對應名稱的參數(shù) | jinfo -flag PrintGC 11772 |
| jinfo -flag [+|-]name pid | 開啟或者關閉對應名稱的參數(shù)(動態(tài)修改參數(shù)) | jinfo -flag -PrintGC 11772 |
| jinfo -flag name=value pid | 修改指定參數(shù)的值(動態(tài)修改參數(shù)) | jinfo -flag HeapDumpPath=C:\error.hprof 11772 |
| jinfo -flags pid | 輸出全部的參數(shù) | jinfo -flags 11772 |
| jinfo -sysprops pid | 輸出當前JVM進程的全部系統(tǒng)屬性 | jinfo -sysprops 11772 |
參考鏈接:jvm 性能調優(yōu)工具之 jinfo - 簡書 (jianshu.com)
jstack
生成當前時刻的線程快照
- jstack pid:查看線程情況
jmap
將內存使用的詳細情況輸出到文件
- jmap -dump:format=b,file=heapDump pid:輸出到文件heapDump
jhat
Jhat分析Jmap打印出的堆快照信息
- jhat 文件名:啟動了一個http服務,端口默認是7000,可以使用http://127.0.01:7000/進行訪問
信息比較大,得對具體代碼有針對的分析,分析哪些對象無法回收的情況
常見問題定位過程
頻繁GC或內存溢出
jps:查看pid
jstat -gc pid 250 20:查看gc情況
jstat -gccause pid:查看上次gc原因
jmap -dump:format=b,file=heapDump pid:生成堆轉儲文件
使用jhat分析堆情況
結合代碼解決內存溢出或泄漏問題。
死鎖問題
jps:查看pid
top -H -p pid:查看哪個線程CPU使用率高
printf %x 線程id:獲取十六進制線程id
jstack pid|grep 十六進制線程id:查看線程情況