1、jps命令得到pid

image.png
由此命令可以得到應(yīng)用的pid為2261,Test是我寫的無限循環(huán)打印程序。
2、top命令得到pid

image.png
一、top命令是Linux下常用的性能分析工具,能夠?qū)崟r顯示系統(tǒng)中各個進程的資源占用狀況,類似于Windows的任務(wù)管理器,通過top命令可以查看機器的cpu,負載均衡等信息。
二、或者使用top -d 1,top -d 1命令查看 當前占用cpu資源最多的,一般排名第一位肯定是java進程,一般也可能存在多個java進程

image.png
3、top -Hp pid命令

image.png
top -H -p 2261含義:
2261是第一步得到的進程的pid。-H 指顯示線程,-p 是指定進程。通過該命令可以查看該進程里面的線程的cpu占用情況??梢钥吹?261的線程占cpu高達64.3%。
ps -mp pid -o THREAD,tid,time命令查看該進程的線程情
-m 所有的線程;
-p表示進程id ;
-o 表示格式化,用戶自定義的格式,按照THREAD,tid,time進行格式化

image.png
可以看到2261的線程占cpu高達62.4%。
時間不同,存在些誤差。
4、printf "%x\n" pid

image.png
將cpu占用過高的線程的pid轉(zhuǎn)化為16進制,8d6。
5、jstack (應(yīng)用所屬的用戶執(zhí)行)
jstack用于生成java虛擬機當前時刻的線程快照。線程快照是當前java虛擬機內(nèi)每一條線程正在執(zhí)行的方法堆棧的集合,生成線程快照的主要目的是定位線程出現(xiàn)長時間停頓的原因,如線程間死鎖、死循環(huán)、請求外部資源導(dǎo)致的長時間等待等。
jstack pid |grep tid -A 30 含義如下:
pid為jps或者top命令得到的進程的pid,tid為第四步得到的線程pid的十六進制數(shù)。

image.png
由此問題為Test.java的第八行。