1、通過top,找出占用CPU高的進程ID 2、 如上圖所示,java的進程id為’52554′,接下來用top命令單獨對這個進程中的所有線程作監視: top-p52554 -H 3、如圖:(這時就看出來哪個java線程CPU高,哪個線程記憶體用的多) 4、 如上圖所示,linux下,所有的java內 ...
1、通過top,找出占用CPU高的進程ID
2、
如上圖所示,java的進程id為’52554′,接下來用top命令單獨對這個進程中的所有線程作監視:
top
-p52554 -H
3、如圖:(這時就看出來哪個java線程CPU高,哪個線程記憶體用的多)
4、
如上圖所示,linux下,所有的java內部線程,其實都對應了一個進程id,也就是說,linux上的sun jvm將java程式中的線程映射為了操作系統進程;我們看到,占用CPU資源最高的那個進程id是’15417′,這個進程id對應java線程信息中的’nid’(‘n’ stands for ‘native’);
5、要想找到到底是哪段具體的代碼占用瞭如此多的資源,先使用jstack打出當前棧信息到一個文件里, 比如stack.log:
- jstack 52554 > stack.log
- python -c
"print hex(9757)"然後記住二進位的號
cat stack.log|grep 二進位的號