JAVA进程高CPU占用故障排查

原创 2015年01月07日 16:45:32
问题描述:
生产环境下的某台tomcat7服务器,在刚发布时的时候一切都很正常,在运行一段时间后就出现CPU占用很高的问题,基本上是负载一天比一天高。

问题分析:
1,程序属于CPU密集型,和开发沟通过,排除此类情况。
2,程序代码有问题,出现死循环,可能性极大。

问题解决:
1,开发那边无法排查代码某个模块有问题,从日志上也无法分析得出。
2,记得原来通过strace跟踪的方法解决了一台PHP服务器CPU占用高的问题,但是通过这种方法无效,经过google搜索,发现可以通过下面的方法进行解决,那就尝试下吧。

解决过程:
1,根据top命令,发现PID为2633的Java进程占用CPU高达300%,出现故障。

2,找到该进程后,如何定位具体线程或代码呢,首先显示线程列表,并按照CPU占用高的线程排序:
[root@localhost logs]# ps -mp 2633 -o THREAD,tid,time | sort -rn

显示结果如下:
USER     %CPU PRI SCNT WCHAN  USER SYSTEM   TID     TIME
root     10.5  19    - -         -      -  3626 00:12:48
root     10.1  19    - -         -      -  3593 00:12:16

找到了耗时最高的线程3626,占用CPU时间有12分钟了!

将需要的线程ID转换为16进制格式:
[root@localhost logs]# printf "%x\n" 3626
e18

最后打印线程的堆栈信息:
[root@localhost logs]# jstack 2633 |grep e18 -A 30


将输出的信息发给开发部进行确认,这样就能找出有问题的代码。
通过最近几天的监控,CPU已经安静下来了

JAVA进程高CPU占用故障排查

问题描述: 生产环境下的某台tomcat7服务器,在刚发布时的时候一切都很正常,在运行一段时间后就出现CPU占用很高的问题,基本上是负载一天比一天高。 问题分析: 1,程序属于CPU密集型,...
  • fenglacy
  • fenglacy
  • 2016年08月18日 16:32
  • 2329

线上问题排查方法-cpu占用过高

场景模拟: 新上线的服务可能发生cpu居高不下的情况,一般是由于出现的死循环造成。我们模拟一段代码,非常简单。我们弄个white死循环,不断的new对象。 代码15行不断的new对象,我们...
  • gaodml
  • gaodml
  • 2016年05月05日 23:39
  • 1146

(一)JAVA CPU占用过高问题排查(linux)

JAVA CPU占用过高问题排查(linux) 最近发现有一个服务在服务器上无响应,到服务器上一看,好家伙,java进程CPU一直100%以上 简单记录下我对这个问题的跟踪 首先当然要看...
  • whupanyinghua
  • whupanyinghua
  • 2016年06月12日 23:47
  • 4421

JAVA进程高CPU占用故障排查

JAVA进程高CPU占用故障排查:在线上怎样结合linux命令和JDK工具定位问题。
  • Mr_Smile2014
  • Mr_Smile2014
  • 2016年11月11日 14:37
  • 2312

线上应用故障排查:高内存占用

上一篇介绍了线上应用故障排查之一:高CPU占用,这篇主要分析高内存占用故障的排查。 搞Java开发的,经常会碰到下面两种异常: 1、java.lang.OutOfMemoryError: ...
  • lifaming15
  • lifaming15
  • 2014年10月29日 10:22
  • 1053

java进程CPU过高问题如何排查?

生产环境有时会遇到java进程CPU使用超过100%,遇到这种问题如何定位问题原因呢? 一般JAVA进程CPU过高主要是程序中出现了死循环,死循环会导致两种情况:第一种,死循环本身不需要耗费太多C...
  • zhouree
  • zhouree
  • 2015年04月20日 17:50
  • 1340

SQLSERVER排查CPU占用高的情况

今天中午,有朋友叫我帮他看一下数据库,操作系统是Windows2008R2 ,数据库是SQL2008R2 64位64G内存,16核CPU硬件配置还是比较高的,他说服务器运行的是金蝶K3软件,数据库...
  • hliq5399
  • hliq5399
  • 2016年06月12日 13:49
  • 1494

windows下揪出java程序占用cpu很高的线程 并找到问题代码 死循环线程代码

http://blog.csdn.net/hexin373/article/details/8846919 我的一个Java程序偶尔会出现cpu占用很高的情况 一直不知道什么原因 ...
  • baidu_18607183
  • baidu_18607183
  • 2017年03月15日 19:26
  • 961

windows下揪出java程序占用cpu很高的线程 并找到问题代码 死循环线程代码

我的一个java程序偶尔会出现cpu占用很高的情况 一直不知道什么原因 今天终于抽时间解决了 系统是win2003 jvisualvm 和 jconsole貌似都只能看到总共占...
  • hexin373
  • hexin373
  • 2013年04月24日 22:21
  • 23869

linux下java程序占用CPU和内存过高排错处理方案

1:通过jps命令查看所有进程pid。 2:使用top -p pid 针对你所要查的pid查看这个进程的CPU和内存以及负载情况 如图: 使用top -p pid  -H  查看针对每一个线程占用...
  • u012516914
  • u012516914
  • 2015年04月28日 09:57
  • 6349
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JAVA进程高CPU占用故障排查
举报原因:
原因补充:

(最多只允许输入30个字)