Troubleshooting High CPU Java

简介:

JavaCPU使用率高

情节描述:

前两天收到很到短信报警(Web服务器的负载都很高,大概上升10倍的样子,达到10~15)。报警的前一天程序上有Update。

分析问题:

经过排查(uptime,top,iostat等等),每台Server的CPU都很高。运行top表现如下

1
top

111950526.png

每台Server的CPU高都呈现在Java上,由考虑到平日正常,前天有更新,所以锁定问题:最新更新的文件有问题。通过top可以查找出java的进程号(PID)。当然方法很多。

其次,确定与其相关的线程列表:

1
ps  -mp PID -o THREAD,tid, time


线程列表图如下:

112933816.png

112935640.png

可以注意到:其中线程号为32143的线程已运行10个小时左右,占用CPU使用率60%左右。

确定了线程,可以查找出那些Java的程序启用的线程。可以通过Jstack查找出那些程序启用此线程。

先将线程ID,转化为16进制格式:

1
printf  "%x\n"  TID

113712353.png

通过Jstack,确定程序:

1
jstack PID| grep  TID -A n

##这是后来补的图片,所以PID,TID可能上下有点不一致。

113857180.png

通过图片:发现是CarInfoUtil这个类文件在做虐啊,呵呵。运维的工作大概结束了,把查找的结果给予开发即可。通过开发的探究,发现这个类有个死循环,会判断一个结果集是否存在,如果不存在,会一直判断,循环。

个人结论:

造成CPU使用率高的原因有很多,这只是一个原因,或者说是探究的一种方法,望给予你启迪吧。










本文转自 kuchuli 51CTO博客,原文链接:http://blog.51cto.com/lgdvsehome/1312573,如需转载请自行联系原作者
目录
相关文章
|
1月前
|
Java
Java面试题之cpu占用率100%,进行定位和解决
这篇文章介绍了如何定位和解决Java服务中CPU占用率过高的问题,包括使用top命令找到高CPU占用的进程和线程,以及使用jstack工具获取堆栈信息来确定问题代码位置的步骤。
105 0
Java面试题之cpu占用率100%,进行定位和解决
|
3月前
|
小程序 JavaScript Java
【Java】服务CPU占用率100%,教你用jstack排查定位
本文详细讲解如何使用jstack排查定位CPU高占用问题。首先介绍jstack的基本概念:它是诊断Java应用程序线程问题的工具,能生成线程堆栈快照,帮助找出程序中的瓶颈。接着,文章通过具体步骤演示如何使用`top`命令找到高CPU占用的Java进程及线程,再结合`jstack`命令获取堆栈信息并进行分析,最终定位问题代码。
316 1
【Java】服务CPU占用率100%,教你用jstack排查定位
|
4月前
|
监控 算法 Java
|
4月前
|
Java
Jstack 查看线程状态及定位占用 cpu 较高的 java 线程
Jstack 查看线程状态及定位占用 cpu 较高的 java 线程
637 2
|
3月前
|
存储 Java API
【Azure Developer】通过Azure提供的Azue Java JDK 查询虚拟机的CPU使用率和内存使用率
【Azure Developer】通过Azure提供的Azue Java JDK 查询虚拟机的CPU使用率和内存使用率
|
4月前
|
监控 算法 Java
压测分析Java内存和CPU暂用
7月更文挑战第7天
67 5
|
4月前
|
Java
手把手教你java CPU飙升300%如何优化
手把手教你java CPU飙升300%如何优化
61 0
|
5月前
|
监控 Java API
使用Java检测当前CPU负载状态的技术博客
使用Java检测当前CPU负载状态的技术博客
89 0
|
6月前
|
Java Linux
Linux下如何定位最耗CPU的JAVA代码
Linux下如何定位最耗CPU的JAVA代码
78 0
|
6月前
|
Java Shell
java中jvm使用jststak定位线程cpu占用内存高的线程
java中jvm使用jststak定位线程cpu占用内存高的线程
53 5
下一篇
无影云桌面