java进程占用过高_window中java进程占用高问题解决

针对某个java程序cpu占用过高问题分析,要想找到问题的真正原因,首先要明确cpu过高的进程,通过对进程下线程的分析,定位到具体的应用代码,从而定位问题的原因所在。

在jdk自带的分析工具中,通过jconsole只能分析到应用程序的相关系统资源使用情况,但无法定位应用程序,故通过此工具了解到应用程序存在问题,但要具体定位到哪块程序不合理造成的是很困难的。

通常java程序部署在windows或者linux下,首先来介绍一下windows下分析的步骤:

1:首先,要获取windows下应用程序在操作系统中的进程id,查看的方式,可以从任务管理器中查看,也可以通过命令查看,通过任务管理器查看我这边就不再累赘了,现在介绍一下通过命令查看的方式,首先打开cmd窗口,输入tasklist命令:

5517543.html

此时发现在应用程序的进程id为6424

目前应用程序的cpu使用情况如下:

5517543.html

即项目一起动,程序没有处理任何业务的情况下,cpu占用已经在49左右了,我截图的时候还是偏低了情况。

其次,要分析一下为什么用占用过高的问题,接下来需要使用一个window的一个自带命令,首先确认一下你的window是否安装了pslist命令程序,如果命令不认别,可以上微软的官网下载,下载地址为:http://technet.microsoft.com/en-us/sysinternals/bb896682.aspx

下载完直接解压到C:\WINDOWS\system32下即可,此命令的作用是获取进程下线程列表,比如说pslist -dmx 6424

5517543.html

从以上截图是6424进程下线程的使用情况,可以发现线程3872的占用率很高,于是现在开始要定位到是哪个应用程序造成的问题

第三:在这里需要使用jstack jdk自带的一个命令工具,关于jstack的用法,大家可以百度一下,网上关于这个命令的使用详解很多,我在这就不再多说了,通过jstack 6424 >C:\test\cdf.log就可以获取到程序的相关信息

5517543.html

5517543.html

最后:把占用cpu的线程的id转换成16进行的数据

5517543.html

打开cdf.log文件,从中搜索f20,即可得到以下结果

5517543.html

即在at cn.sslsocket.SSLSocketClient.run(SSLSocketClient.java:239)中run方式就执行某段代码出现占用过高的问题,经过代码定位,发现在此处出现在了死循环,修复即可

通过以上分析,大家应该有一个比较清楚的了解,解决此类问题首先要知道怎么入手,接着要定位到问题的发生点,这样才能从根本上解决问题。

关于linux下如何解决此问题我在此就不多说了,其它步骤是一样的,只是用到的命令可能不一样而已!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值