天天看點

linux程序性能檢視指令

一、linux下查找java程序占用cpu過高原因

1.檢視程序

top指令檢視程序占用資源情況

2.查找線程

top -H -p <pid>檢視線程占用情況

ps -mp pid(程序id) -o THREAD,tid,time 檢視線程清單

3.查找java的堆棧資訊

将線程id轉換成十六進制

printf "%x\n" 15664

4.使用jstack查詢線程堆棧資訊

jstack <pid> | grep -A 20 線程id(十六進制)   定位到線程ID的後20行

5.分析原因和修改代碼

二、線上服務記憶體OOM問題定位

jmap -heap 10765   

#檢視程序新生代、老年代堆記憶體的配置設定大小以及使用情況,看是否本身配置設定過小。

jmap -histo:live 10765 | more   

#找到最消耗記憶體的對象。

jmap -dump:live,format=b,file=dump.hprof 程序id 

#jmap指令dump出堆裡的對象檔案,使用jprofiler、visalVM、eclipse mat分析記憶體對象情況。

三、full gc問題排查

老年代空間不足

永生代或者中繼資料空間不足

System.gc()方法調用

CMS GC時出現promotion failed和concurrent mode failure

YoungGC時晉升老年代的記憶體平均值大于老年代剩餘空間

有連續的大對象需要配置設定

jstat -gcutil 9596 250 12

#程序9596每隔250ms列印一次,列印12次。

jstat -gccause pid

#檢視gc詳細原因

jmap -histo 程序id > jmap.txt

#dump檔案分析,找到占用記憶體的對象,定位到具體code。

繼續閱讀