一、問題描述
Tomcat下面部署很多個java項目的war包,tomcat啟動一段時間后,發現cpu占用過高,整個界面卡死!
二、通過process explorer查看java進程下的線程
process explorer是Windows系統和應用程序監視工具。
process explorer下載:https://technet.microsoft.com/en-us/sysinternals/bb896653/
下載后直接打開即可:
使用PID為3764的進程,點開javaw.exe進程:
這時候會發現TID為4060(10進制)的線程占用CPU最高,下面找到該進程在項目中的位置。
三、通過jstack把進程下所以的Java線程棧的內容打印出文本中
jstack是java虛擬機自帶的一種堆棧跟蹤工具,用於生成虛擬機當前時刻的線程快照,包含虛擬機中每一個線程正在執行的方法堆棧的集合,用於定位線程出現長時間停頓的原因,如死鎖、死循環、外部資源長時間等待等
在cmd命令里輸入:jstack -l 3764 回車:
將4060(TID)十進制轉成16進制(在線工具:http://tool.oschina.net/hexconvert/)為fdc;
找到nid=0xfdc,找到后面對應的java類對應的行數,即可定位到問題。