针对某个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获取CPU占用率 java 获取 CPU 占用率
Java程序 CPU占用100%问题排查通过top确认问题进程,获得pid。根据pid查出问题线程,获得线程id,tid。通过jstack把pid的信息导出文件
java cpu 内存占用高 问题 模拟并排查 https://blog.csdn.net/jiankunking/article/details/79749836 https://blog.csdn.net/jiankunking/article/details/79749483
用java获取cpu占用
主要介绍了java应用cpu占用过高问题分析及解决方法,具有一定参考价值,需要的朋友可以参考下。
Linux系统中java进程占用cpu资源过高,分析(自用,需要私聊)
Java线程CPU占用高原因排查方法,Java线程CPU占用高原因排查方法
给大家分享了java实战CPU占用过高问题的排查及解决方法,有需要的朋友们可以学习下。
NULL 博文链接:https://chenming100-1976.iteye.com/blog/810333
主要介绍了Java进程cpu占用过高问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
java写的一个模拟cpu程序,可以识别汇编程序,支持打印机等外设,界面友好,性能良好,界面是用VE来做的,可以单步执行语句,让你更好地理解cpu内部的工作原理。
linux服务器找到占用cpu高的java代码的办法
Java通过访问window的后台获得当前PC机器的CPU占有率,只适合windows环境!
一个应用占用CPU很高,除了确实是计算密集型应用之外,通常原因都是出现了死循环。下面这篇文章主要给大家介绍了一次因Java应用造成CPU过高的排查实践过程,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
java进程占用CPU和内存太高问题排查相关测试文件
解决 linux下 buff/cache 占用过高的问题解决 linux下 buff/cache 占用过高的问题
JAVA 工具分析CPU占用过大,CPU总是过大,这个分析可以帮你解决问题
将定位cpu过高的命令做了一个整理,直接执行脚本定位问题