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??
轉載于:https://www.cnblogs.com/sddychj/p/9529503.html
總結
以上是生活随笔為你收集整理的windows下揪出java程序占用cpu很高的线程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 前端 ---jQuery的补充
- 下一篇: 第7章 输入/输出系统