Java應(yīng)用cpu使用率過高

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的第八行。

參考
1、java應(yīng)用cpu使用率過高問題排查
2、java線上應(yīng)用cpu占用過高排查

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容