使用JVisualVM查找并定位Java程序CPU使用率过高问题
来源:互联网 发布:linux设备驱动开发详解 编辑:程序博客网 时间:2024/06/02 01:07
今天发现写的爬虫一旦运行起来,CPU利用率瞬间飙升到85%-95%,一旦停止就恢复到40%以下,这让我不得不面对以前从未关注过的程序性能问题。唉~~我就是小白呀
注:文章中截图来自程序调整后的截图,可能CPU占用率过高问题并不明显。
最初想通过java自带的JVisualVM来调试,但发现JVisualVM最多查找到类。
如果所示,但不能更详细的进行定位。于是参考了网上的部分文章,经过一步步,最终实现了定位了出问题的代码。
一、查找进程
查找问题进程比较简单,因为问题集中在CPU资源占用过高,那么我们查找进程时只需关注CPU。
打开JVisualVM,在Applications(中文版写的应用程序)面板中即可看到应用所在进程的PID8596和11556。
需要注意的是该工具并不能定位到线程。
二、查找线程
根据进程查找线程,有两种方法。
1、使用window自带命令pslist
首先确认系统是否安装了pslist命令程序,如果命令不识别即没有安装,则上微软官方网址http://technet.microsoft.com/en-us/sysinternals/bb896682.aspx下载,下载完将其解压到C:\Windows\System32路径下即可使用。
2、利用微软提供的Process Explorer工具(推荐使用这个工具,可视化界面看起来很方便)
一般在windows下只能查看进程的CPU占用率,想要查看线程的CPU占用率可以通过该工具。下载地址是:http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx
下载后运行起来,找到PID为8596的进程
右键点击Properties...选项,看到如下信息:
可以看到占用CPU最多的也是TID为20728的线程。
三、问题定位
问题定位需要以下步骤:
1、将线程TID转换为十六进制
因为线程dump信息中线程TID是十六进制的(堆dump也是这样),所以我们首先转换进制,这里通过系统自带的计算器进行转换。
记录下50F8这个数字。
2、在JVisualVM中的中线程dump中查找“50F8”
在JVisualVM中,应用程序右击,找到“线程Dump”
全选复制出来,通过Notepad++工具打开该文档,搜索“50F8”,可以看到问题定位到了具体的哪一行。(因为我程序是修改过的,所以CPU占用并没有太大问题,自然也就定位到正常的JVM处)
最后根据定位的位置去找问题就可以啦~~~·
- 使用JVisualVM查找并定位Java程序CPU使用率过高问题
- .NET定位CPU使用率过高问题
- Java程序 CPU使用率过高怎么办?
- Java CPU使用率过高分析
- 生产环境java应用 CPU使用率过高问题排查
- 如何解决CPU使用率过高问题
- Oracle CPU使用率过高问题处理
- 解决安卓CPU使用率过高问题
- Oracle数据库CPU使用率过高问题处理
- 使用Android Studio 自带的monitors查找App CPU 使用率过高的原因
- java自带工具JvisualVM调试tomcat CPU使用量过高
- java问题导致linux负载、cpu过高如何定位
- windows下查找java应用占用CPU过高问题
- windows下查找java应用占用CPU过高问题
- 查找Java程序中CPU使用率最大的线程
- 如何定位CPU占用过高问题
- spoolsv.exe占CPU使用率过高的问题
- 如何解决服务器CPU使用率过高的问题<一>
- SSH之免密登陆
- C#——窗体跳转
- 在windows下配置pthread
- sql内连接外链接做链接有了链接
- Android-Glide使用
- 使用JVisualVM查找并定位Java程序CPU使用率过高问题
- finally关键字
- navigation view 使用
- 微信内置浏览器关闭本窗口
- Linux安装Oracle12C 过程及遇到的问题
- git rm --cache忽略已经提交的文件和如何恢复
- java post json
- Java单例模式
- 关于回调函数和钩子函数基础知识的整理