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,如需转载请自行联系原作者
目录
相关文章
|
10月前
|
监控 C#
【Function App】如果一个拥有多个Function App的Plan遇见了High CPU问题? 如何方便定位是哪一个Function App引发的呢?
在Azure Function App测试中,若多个Function App共用同一App Service Plan资源,当出现High CPU问题时,由于Function App公开指标无法直接观测CPU状态,可通过启用Application Insights解决。其Live Metrics功能可过滤并查看每个Function App的CPU使用情况。具体步骤为:将所有Function App连接至同一Application Insights资源,进入Live Metrics页面按Role筛选监控数据。附有三段C#代码示例,分别展示占用CPU、Memory及普通功能的实现方法。
266 36
|
存储 缓存 算法
面试官:单核 CPU 支持 Java 多线程吗?为什么?被问懵了!
本文介绍了多线程环境下的几个关键概念,包括时间片、超线程、上下文切换及其影响因素,以及线程调度的两种方式——抢占式调度和协同式调度。文章还讨论了减少上下文切换次数以提高多线程程序效率的方法,如无锁并发编程、使用CAS算法等,并提出了合理的线程数量配置策略,以平衡CPU利用率和线程切换开销。
面试官:单核 CPU 支持 Java 多线程吗?为什么?被问懵了!
|
Java 对象存储 开发者
如何找出Java进程占用CPU高的元凶
本文记录了一次Java进程CPU占用率过高的问题和排查思路。
|
存储 缓存 前端开发
JavaEE初阶——初识EE(Java诞生背景,CPU详解)
带你从零入门JAVAEE初阶,Java的发展历程认识什么是cpu,cpu的工作原理,cpu是如何进行计算的,cpu的架构,指令集,cpu的核心,如何提升cpu的算力,cpu的指令,,cup的缓存,cpu的流水线
|
小程序 JavaScript Java
【Java】服务CPU占用率100%,教你用jstack排查定位
本文详细讲解如何使用jstack排查定位CPU高占用问题。首先介绍jstack的基本概念:它是诊断Java应用程序线程问题的工具,能生成线程堆栈快照,帮助找出程序中的瓶颈。接着,文章通过具体步骤演示如何使用`top`命令找到高CPU占用的Java进程及线程,再结合`jstack`命令获取堆栈信息并进行分析,最终定位问题代码。
1876 2
【Java】服务CPU占用率100%,教你用jstack排查定位
|
Java
Java面试题之cpu占用率100%,进行定位和解决
这篇文章介绍了如何定位和解决Java服务中CPU占用率过高的问题,包括使用top命令找到高CPU占用的进程和线程,以及使用jstack工具获取堆栈信息来确定问题代码位置的步骤。
1220 0
Java面试题之cpu占用率100%,进行定位和解决
|
监控 算法 Java
|
Java
Jstack 查看线程状态及定位占用 cpu 较高的 java 线程
Jstack 查看线程状态及定位占用 cpu 较高的 java 线程
1490 2
|
监控 算法 Java
压测分析Java内存和CPU暂用
7月更文挑战第7天
225 5
|
存储 Java API
【Azure Developer】通过Azure提供的Azue Java JDK 查询虚拟机的CPU使用率和内存使用率
【Azure Developer】通过Azure提供的Azue Java JDK 查询虚拟机的CPU使用率和内存使用率
229 0