zoukankan      html  css  js  c++  java
  • window中java进程占用高问题解决

    java程序cpu占用过高问题分析

    标签: java 程序 cpu | 发表时间:2014-06-26 02:02 | 作者:阳光雨露
    分享到:
    出处:http://www.iteye.com

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

        在jdk自带的分析工具中,通过jconsole只能分析到应用程序的相关系统资源使用情况,但无法定位应用程序,故通过此工具了解到应用程序存在问题,但要具体定位到哪块程序不合理造成的是很困难的。 
        通常java程序部署在windows或者linux下,首先来介绍一下windows下分析的步骤:
        1:首先,要获取windows下应用程序在操作系统中的进程id,查看的方式,可以从任务管理器中查看,也可以通过命令查看,通过任务管理器查看我这边就不再累赘了,现在介绍一下通过命令查看的方式,首先打开cmd窗口,输入tasklist命令: 
     
     
    此时发现在应用程序的进程id为6424
        目前应用程序的cpu使用情况如下:
        即项目一起动,程序没有处理任何业务的情况下,cpu占用已经在49左右了,我截图的时候还是偏低了情况。
        其次,要分析一下为什么用占用过高的问题,接下来需要使用一个window的一个自带命令,首先确认一下你的window是否安装了pslist命令程序,如果命令不认别,可以上微软的官网下载,下载地址为:http://technet.microsoft.com/en-us/sysinternals/bb896682.aspx
    下载完直接解压到C:\WINDOWS\system32下即可,此命令的作用是获取进程下线程列表,比如说pslist -dmx 6424
    从以上截图是6424进程下线程的使用情况,可以发现线程3872的占用率很高,于是现在开始要定位到是哪个应用程序造成的问题
        第三:在这里需要使用jstack jdk自带的一个命令工具,关于jstack的用法,大家可以百度一下,网上关于这个命令的使用详解很多,我在这就不再多说了,通过jstack 6424 >C:\test\cdf.log就可以获取到程序的相关信息
        最后:把占用cpu的线程的id转换成16进行的数据
    打开cdf.log文件,从中搜索f20,即可得到以下结果
    即在at cn.sslsocket.SSLSocketClient.run(SSLSocketClient.java:239)中run方式就执行某段代码出现占用过高的问题,经过代码定位,发现在此处出现在了死循环,修复即可
     
        通过以上分析,大家应该有一个比较清楚的了解,解决此类问题首先要知道怎么入手,接着要定位到问题的发生点,这样才能从根本上解决问题。
        关于linux下如何解决此问题我在此就不多说了,其它步骤是一样的,只是用到的命令可能不一样而已!
    好的代码像粥一样,都是用时间熬出来的
  • 相关阅读:
    关于线程池,那些你还不知道的事
    Java发送邮件
    原来实现项目多环境打包部署是如此的简单
    史上最全的maven的pom.xml文件详解
    Linux系统基础知识整理(一)
    计算机启动过程的简单介绍 计算机启动流程 计算机BIOS作用 POST 开机自检 计算机启动顺序 分区表 操作系统启动
    交换机工作原理、MAC地址表、路由器工作原理详解
    $(function(){})和$(document).ready(function(){}) 的区别
    关于RAM与ROM的区别与理解
    CDN的作用与基本过程
  • 原文地址:https://www.cnblogs.com/jijm123/p/15666782.html
Copyright © 2011-2022 走看看