一次通过jstack 和 pslist定位程序问题
10年征战背景..........................
短时间进行elasticsearch插入没有问题。
可是连续插入几个小时候,cpu好的飞起。360加速器都要爆炸。
先声明原帖 http://blog.csdn.net/ningzuobei/article/details/48828915
1 没办法,邮件任务管理器,资源管理器。发现了猫腻。java.exe的进程占据了接近百分之80的cpu。
还好我能看到她的进程号。我的是5460.
2 我需要知道这个进程在做些什么,通过cmd命令
jstack 5460 > E:\test\resource.log (C盘可能不行)。 这样得到一段时间内这个进程做的事情。直接打开看是无头绪的。
3 我们需要揪出这个进程里面那个线程在做怪 通过pstools工具,
微软官方网址
http://technet.microsoft.com/en-us/sysinternals/bb896682.aspx
下载 ,有帖子说
下载完将其解压到C:\Windows\System32路径下即可使用。但是我好像不行,我是把这个解压到
C:\Windows\System32这个路径下,并且把里面的pslist.exe复制到
C:\Windows\System32目录下才行。
在cmd命令窗口中执行命令:
pslist -dmx 5460
找到使用Cswtch最多的两个running线程 。记下他们的线程号。
4 10进制的线程号需要换成16进制的 。 打开自带的计算器-查看-程序员。把它换成16进制的。转换的结果可能是纯数字,也可能带字母
5 打开我们获得的resouce.log文件。Notepad++打开为好。查找我们转换的16进制线程号 。找到nid=
0x线程号。下面的内容就是想要的结果