java多线程-cpu内存占用-定位分析

2020-12-10 00:00:00 java 多线程

一,创建测试环境(windows)

二,定位

正文:

测试环境如下:

建立2个线程类,一个run死循环执行大量io,另一个run死循环执行1秒睡眠。main方法开启4线程,上述每个开启2个。

高占用如下:

《java多线程-cpu内存占用-定位分析》

下载process explorer可查看进程的详细信息:

《java多线程-cpu内存占用-定位分析》

可看出,java进程里2个线程高占用cpu。

现在大概定位问题了,如果对程序很熟悉的,基本上在这一步就可以定位代码段了。

对程序不熟悉,还要进一步定位。

此处线程的TID,我们需要转化成16进制表示,下面的线程快照会用到。

以8740举例,转换成16进制是2224。

打开cmd,>jps,获取进程id:

《java多线程-cpu内存占用-定位分析》

6064。

使用java的jstack明令:>jstack 6064,获取线程快照。

(此处在命令窗口显示,可读性较差,可自行百度如何生成文件)

我们寻找nid是2224的线程,找到了:

《java多线程-cpu内存占用-定位分析》

线程状态runnable(自行百度线程的状态),没错,就是他。

下文定位到了具体方法,没错,就是这个:

《java多线程-cpu内存占用-定位分析》

此方法执行大量io操作,高占用cpu。

测试成功。

    原文作者:mars_nier
    原文地址: https://blog.csdn.net/yandaonan/article/details/50826110
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。

相关文章