1. jps
查看當前正在運行的所有java進程。
1. Jmap
用來查看內(nèi)存信息,實例個數(shù)及占用空間大小
1.1 查看某個java進程信息
jmap -histo pid > ./log.txt

jmap.png
其中:
(1)instances: 實例數(shù)量
(2)bytes: 占用空間大小
(3)class name: 類名稱
1.2 查看該進程堆信息
(1)jmap -heap pid

查看該進程堆信息.png
(2)查看堆內(nèi)存dump
jmap -dump:format=b, file=eureka.hprof pid
2. jstack
2.1 查看進程是否死鎖
使用命令:jstack pid
2.2 嘗試查找cpu占用最高的線程堆棧信息
(1)top -p pid找到java進程內(nèi)存信息

top -p pid.png
(2)按H,獲取每個線程的內(nèi)存信息

獲取每個線程的內(nèi)存信息.png
(3)找到內(nèi)存和cpu占用最高的線程tid,比如19664
(4)轉為十六進制得到
0x4cd0,此為線程id的十六進制表示
(5)執(zhí)行jstack 19663|grep
-A 10 4cd0,得到線程堆棧信息中4cd0這個線程所在的位置。
3. jinfo
查看正在運行的java應用的擴展參數(shù)。
(1)查看jvm相關參數(shù):
jinfo -flags pid
4. jstat
查看堆內(nèi)存各個部分的使用量,加載類數(shù)量。
4.1 垃圾回收統(tǒng)計
jstat -gc pid,查看垃圾回收器整體情況,以此評估GC壓力

jstat -gc pid.png
4.2 評估JVM運行情況
(1)檢查年輕代對象增長速度
jstat -gc pid 1000 10(每隔1秒執(zhí)行1次命令,共執(zhí)行10次)
(2)優(yōu)化思路
盡量讓每次Young GC后的存活對象小于Survivor區(qū)域的50%,都留存在年輕代里。盡量別讓對象進入老年
代。盡量減少Full GC的頻率,避免頻繁Full GC對JVM性能的影響。