java多线程-cpu内存占用-定位分析
一,创建测试环境(windows)
二,定位
正文:
测试环境如下:
建立2个线程类,一个run死循环执行大量io,另一个run死循环执行1秒睡眠。main方法开启4线程,上述每个开启2个。
高占用如下:
下载process explorer可查看进程的详细信息:
可看出,java进程里2个线程高占用cpu。
现在大概定位问题了,如果对程序很熟悉的,基本上在这一步就可以定位代码段了。
对程序不熟悉,还要进一步定位。
此处线程的TID,我们需要转化成16进制表示,下面的线程快照会用到。
以8740举例,转换成16进制是2224。
打开cmd,>jps,获取进程id:
6064。
使用java的jstack明令:>jstack 6064,获取线程快照。
(此处在命令窗口显示,可读性较差,可自行百度如何生成文件)
我们寻找nid是2224的线程,找到了:
线程状态runnable(自行百度线程的状态),没错,就是他。
下文定位到了具体方法,没错,就是这个:
此方法执行大量io操作,高占用cpu。
测试成功。
原文作者:mars_nier
原文地址: https://blog.csdn.net/yandaonan/article/details/50826110
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
原文地址: https://blog.csdn.net/yandaonan/article/details/50826110
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
相关文章