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已经安静下来了

python线程进程、异步IO

多线程是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间 执行多于一个线程,进而提升整体处理性能。 该章节主要包括线程进程的概念,基于python的线程进程实现,GIL锁的影响,消费者生产者模型,进程池的应用以及IO模型的介绍,一句话概括本章的内容就是:实现并发编程,即计算机能够同时处理多个任务。
  • 2017年03月06日 18:23

linux下查找java进程占用CPU过高原因

1. 查找进程 top查看进程占用资源情况 明显看出java的两个进程22714,12406占用过高cpu.   2.查找线程 使用top -H -p 查看线程占用情况  ...
  • u014738683
  • u014738683
  • 2016-12-28 21:56:44
  • 3978

java进程cpu过高原因整理

1、存在死循环 2、tomcat原因,下载新的tomcat试试 3、计算线程较多
  • Truong
  • Truong
  • 2017-05-25 16:24:49
  • 408

windows下查找java应用占用CPU过高问题

最近在测试一个用java语言实现的数据采集接口时发现,接口一旦运行起来,CPU利用率瞬间飙升到85%-95%,一旦停止就恢复到40%以下,这让我不得不面对以前从未关注过的程序性能问题。 在硬着头皮查找...
  • ningzuobei
  • ningzuobei
  • 2015-09-30 15:10:12
  • 10219

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

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

LINUX类主机JAVA应用程序占用CPU、内存过高分析手段

  • 2015年12月11日 17:40
  • 378KB
  • 下载

线上java程序CPU占用过高问题排查

工作中负责的有一个项目是使用iReport+JasperReport实现的一个打印系统。最近这个线上程序经常无响应,重启后恢复正常,但是时不时还是会出现类似的问题。 最后发现是Jaspe...
  • u010862794
  • u010862794
  • 2017-09-18 16:01:55
  • 4275

找出System进程占用100%CPU的原因

1.运行“perfmon”打开性能管理,右击右窗格选择“添加计数器”,在“性能对象”下拉菜单中选择“线程”,“从列表中选择范例”选中所有Syetem的线程(如System/0、System/nnn),...
  • sytuyuan
  • sytuyuan
  • 2007-03-23 21:55:00
  • 4202

找出java进程占cpu高的脚本

找出java进程占cpu高的脚本 运行步骤:个人习惯将脚本保存tomcat的bin目录下 top查找占cpu高的java进程的pid 进入所属目录,运行命令 ./java_Analy.sh pi...
  • junoohoome
  • junoohoome
  • 2016-12-17 01:13:10
  • 1320

Linux下,Java进程占用CPU超100%

详见:http://blog.csdn.net/sanshiqiduer/article/details/1933625
  • gaojinshan
  • gaojinshan
  • 2014-03-03 17:16:27
  • 10696
收藏助手
不良信息举报
您举报文章:JAVA进程高CPU占用故障排查
举报原因:
原因补充:

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