`
阳光雨露
  • 浏览: 24342 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

【原创】java程序cpu占用过高问题分析

    博客分类:
  • java
 
阅读更多

针对某个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聊天室程序源码(毕业设计)

    Java聊天室程序源码 2 需求分析 2.1 业务需求 1. 与聊天室成员一起聊天。 2. 可以与聊天室成员私聊。 3. 可以改变聊天内容风格。 4. 用户注册(含头像)、登录。 5. 服务器监控聊天内容。 6. 服务器过滤非法内容。 7...

    Copper Java播放器 V5

    《Copper Java播放器 V5》是一款由Copper Lau原创设计的Java应用程序,专注于音频和视频的播放功能。作为一个基于Java技术的多媒体播放器,它展现了Java平台的强大潜力,为用户提供了跨平台的媒体播放体验。Java...

    在同一台服务器上配置多个Tomcat(原创)

    Tomcat是一款开源的Java Servlet容器,主要用于运行Java Web应用程序。它通过监听特定端口接收HTTP请求,并将这些请求转发给相应的应用。默认情况下,一个Tomcat实例会占用8080端口,但可以通过修改配置文件来更改这...

    嵌入式系统

    驱动工程师的任务是编写高效的驱动程序,确保它们能够在系统调用时不占用过多的时间片,从而不影响其他任务的执行。为了胜任这一角色,除了需要掌握硬件层所需的基础知识之外,还需要精通数据结构与算法、操作系统...

    五子棋-安卓版代码

    【五子棋安卓版代码】项目是一个基于Java编程语言开发的安卓应用程序,旨在实现一个五子棋游戏。在这个项目中,开发者已经完成了大部分基础功能,包括棋盘的绘制、棋子的放置、用户交互等核心模块。然而,值得注意的...

    网络爬虫系统项目建设方案.docx

    Nutch是一款基于Java的开源搜索引擎,可以实现从网页抓取到全文搜索的完整功能,是构建大规模网络爬虫的理想选择。 - **集成Lucene**:Nutch基于Lucene,这意味着它可以提供强大的文本搜索和索引能力,从而为用户...

    调用闪光灯的手电

    这段描述表明资源并非原创,可能是一个开源或共享的项目,开发者从互联网上获取并尝试运行,但遇到了兼容性问题,即该程序可能无法在特定设备或操作系统版本上正常工作。尽管如此,代码本身仍然有价值,可以作为其他...

Global site tag (gtag.js) - Google Analytics