windows下揪出java程序占用cpu很高的線程


背景

      天天搞java,這些監控也都知道,用過,但也沒往細里追究。因為也沒碰見這種問題,這次還是靜下來走一遍流程吧。與網上基本一致,不過我區分了下linux和windows的不一樣。我感覺基本是程序寫成死循環了或者大對象分配多了才有這種問題吧。

步驟

1.找到java進程對應的pid。通過任務管理器。linux---top

2.然后把java進程導出快照。直接運行命令。stack -l 31372 > c:/31372.stack  

3.在windows下只能查看進程的cpu占用率,要查看線程的cpu占用率要借助其他的工具,我這里用的是微軟提供的 Process Explorer v15.3

                                                                                                    右鍵點擊需要查看的進程---properties 

linux下先輸入top,然后再按shift+h 或“H”,此時打開的是線程視圖,pid為線程號

4.然后選擇 Threads 選項卡,找到占用cpu的線程的tid,比如我這里是 31876 的線程

5.把pid轉換成16進制,我這里直接用系統自帶的計算器轉換,置於為什么要轉換,是因為先前用jstack導出的信息里面線程對應的tid是16進制的。

cmd---calc---計算器左上角選擇程序員,可進制轉換 。最后得到的線程pid的16進制的值為 7C84 

6.在 c盤的31372.stack文件中查找 7C84

Thread-23" prio=6 tid=0x03072400 nid=0x1b68 runnable [0x0372f000]  

   java.lang.Thread.State: RUNNABLE  

   at com.horn.util.MyEncrypt.encode(MyEncrypt.java:17)  

 at com.horn.common.OrderUtil.hisExp(OrderUtil.java:228)  

 at com.horn.util.MsgManage.receiveMsg(MsgManage.java:961)  

   at com.horn.util.PollMessageThread.run(PollMessageThread.java:74)  

   Locked ownable synchronizers:      - None  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM