前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >记一次 JVM CPU 使用率飙高问题的排查过程

记一次 JVM CPU 使用率飙高问题的排查过程

原创
作者头像
CG国斌
修改于 2020-04-14 09:18:25
修改于 2020-04-14 09:18:25
5.3K0
举报
文章被收录于专栏:维C果糖维C果糖

问题现象

首先,我们一起看看通过 VisualVM 监控到的机器 CPU 使用率图:

cpu-usage
cpu-usage

如上图所示,在 下午3:45 分之前,CPU 的使用率明显飙高,最高飙到近 100%,为什么会出现这样的现象呢?

排查过程

Step 1:使用top命令,查询资源占用情况:

top
top

如上图所示,显示了服务器当前的资源占用情况,其中PID5456的进程占用的资源最多。

在这里,我们也使用top -p PID命令,查询指定PID的资源占用情况:

top-p
top-p

Step 2:使用ps -mp PID -o THREAD,tid,time命令,查询该进程的线程情况:

ps
ps

在这里,我们也使用ps -mp PID -o THREAD,tid,time | sort -rn命令,将该进程下的线程按资源使用情况倒序展示:

ps-sort
ps-sort

Step 3:使用printf "%x\n" PID命令,将PID转为十六进制的TID

printf
printf

在这里,我们之所以需要将PID转为十六进制是因为在堆栈信息中,PID是以十六进制形式存在的。

Step 4:使用jstack PID | grep TID -A 100命令,查询堆栈信息:

jstack
jstack

如上图所示,显示该进程下多个线程均处于TIMED_WAITING状态。

虽然线程处于WAITING或者TIMED_WAITING状态都不会消耗 CPU,但是线程频繁的挂起和唤醒却会消耗 CPU,而且代价高昂。

而上面之所以会出现 CPU 使用率飙高的情况,则是因为有人在做压测。

特别地,在 mock 底层接口的时候,使用了类似TimeUnit.SECONDS.sleep(1)这样的语句。

至于为何在 下午3:45 分之后,CPU 的使用率降下来了,则是因为停止了压测。


除此之外,我们还可以使用jinfojstat命令来查询 Java 进程的启动参数以及 GC 情况:

  • 使用jinfo PID命令,查询启动参数:
jinfo
jinfo

如上图所示,使用该命令我们主要是为了查询启动参数,如初始化堆大小、垃圾回收器等配置。

  • 使用jstat -gcutil PID 1000命令,查询 GC 情况:
jstat
jstat

如上图所示,显示了PID20567的 Java 进程每秒的 GC 情况,其中1000表示 GC 状态的更新频率,单位为毫秒。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
记一次 JVM CPU 使用率飙高问题的排查过程
如上图所示,在 下午3:45 分之前,CPU 的使用率明显飙高,最高飙到近 100%,为什么会出现这样的现象呢?
CG国斌
2022/05/06
1.8K0
记一次 JVM CPU 使用率飙高问题的排查过程
记一次 JVM CPU 使用率飙高问题的排查过程
点击上方“芋道源码”,选择“设为星标” 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 10:33 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | Java 2021 超神之路,很肝~ 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网络应用框架 Netty 源码解析 消息中间件 RocketMQ 源码解析 数据库中间件 Sharding-JDBC 和 MyCAT 源码解析 作业调度中间件 Elastic-Job 源码解析 分布式事务中间件 TCC-Transaction
芋道源码
2022/10/10
2.1K1
记一次 JVM CPU 使用率飙高问题的排查过程
线上CPU飙升100%问题排查,一篇足矣
对于互联网公司,线上CPU飙升的问题很常见(例如某个活动开始,流量突然飙升时),按照本文的步骤排查,基本1分钟即可搞定!特此整理排查方法一篇,供大家参考讨论提高。
Java_老男孩
2019/12/02
3.1K0
JVM调优之Java进程消耗CPU过高
发现46b1对应的线程为Parallel GC Threads,这个就是JVM下的GC线程,它在频繁的进行垃圾回收。
翎野君
2023/05/12
6920
JVM调优之Java进程消耗CPU过高
服务器常见问题排查(一)——CPU占用高、上下文频繁切换、频繁GC
该命令将显示包含nid的堆栈信息。注意,这里使用了grep命令来过滤输出结果,只显示包含nid的部分。-C5表示在匹配项前后各显示5行上下文信息,--color则用于在输出中添加颜色标记。
遥遥知识库
2023/10/26
1.3K1
服务器常见问题排查(一)——CPU占用高、上下文频繁切换、频繁GC
架构师技能4-深入分析java进程CPU飙高和长耗时
前段总结 彻底深入理解和分析Java中内存溢出OutOfMemoryError 和此文是姐妹篇。前面总结的是内存问题,本文总结的是cpu问题。
黄规速
2022/04/14
1.7K0
架构师技能4-深入分析java进程CPU飙高和长耗时
cpu使用率过高和jvm old占用过高排查过程
占用cpu过高的线程有两个,其中一个是打印异常日志的(会new 对象),还有gc线程
每天晒白牙
2020/08/21
2.7K0
cpu使用率过高和jvm old占用过高排查过程
从CPU爆表问题排查谈Java性能监测之道
记一次Java线上服务器CPU过载问题的排查过程,详解排查过程中用到的Java性能监测工具:jvisualvm、jstack、jstat、jmap。
净地
2018/07/17
2K0
从CPU爆表问题排查谈Java性能监测之道
系统运行缓慢,CPU 100%,以及Full GC次数过多问题的排查思路
处理过线上问题的同学基本上都会遇到系统突然运行缓慢,CPU 100%,以及Full GC次数过多的问题。当然,这些问题的最终导致的直观现象就是系统运行缓慢,并且有大量的报警。本文主要针对系统运行缓慢这一问题,提供该问题的排查思路,从而定位出问题的代码点,进而提供解决该问题的思路。
芋道源码
2019/06/21
1.1K0
系统运行缓慢,CPU 100%,以及Full GC次数过多问题的排查思路
面试官:生产环境中 CPU 利用率飙高怎么办?
生产环境中 CPU 利用率飙高的情况该如何排查?你是否在面试的时候也被问到过类似的问题呢?今天,我们就一起研究一下。
刘水镜
2022/07/29
7860
面试官:生产环境中 CPU 利用率飙高怎么办?
Java经典面试解析:服务器卡顿、CPU飙升、接口负载剧增
解决这个问题的关键是要找到Java代码的位置。下面分享一下排查思路,以CentOS为例,总结为4步。
Java3y
2023/08/22
4890
Java经典面试解析:服务器卡顿、CPU飙升、接口负载剧增
java(10)-JVM性能监控和优化
GC监控是为了鉴别JVM是否在高效地执行GC,以及是否有必要进行额外的性能调优。基于以上信息,我们可以修改应用程序或者调整GC算法(GC优化)。
黄规速
2022/04/14
1.2K0
java(10)-JVM性能监控和优化
详解 Java 线上问题排查思路
因为通常线程数量会由线程池管理,一般不会超过我们设定的最大值;而线程“死锁”通常是人为代码问题,某个获得锁的线程没有释放锁,导致其他线程一直处于 Waiting 状态(或者 CAS 自旋状态)。
宫水三叶的刷题日记
2021/03/02
3.4K0
详解 Java 线上问题排查思路
JVM Dump分析
Thread Dump是非常有用的诊断 Java应用问题的工具。每一个 Java虚拟机都有及时生成所有线程在某一点状态的 thread-dump的能力,虽然各个 Java虚拟机打印的 thread dump略有不同,但是大多都提供了当前活动线程的快照,及 JVM中所有 Java线程的堆栈跟踪信息,堆栈信息一般包含完整的类名及所执行的方法,如果可能的话还有源代码的行数。
Java架构师必看
2021/05/14
2K0
JVM Dump分析
服务器CPU飚高排查
当正在运行的Java服务导致服务器的CPU突然飙高时,我们该如何排查定位到哪个接口的哪行代码导致CPU飙高的问题呢?我主要提供两个方案:
关忆北.
2023/10/11
3840
服务器CPU飚高排查
记一次线上Java程序导致服务器CPU占用率过高的问题排除过程
使用top命令查看资源占用情况,发现pid为14063的进程占用了大量的CPU资源,CPU占用率高达776.1%,内存占用率也达到了29.8%
会跳舞的机器人
2018/09/21
2.2K0
记一次线上Java程序导致服务器CPU占用率过高的问题排除过程
JVM 常见线上问题 → CPU 100%、内存泄露 问题排查
  后文会从 Windows、Linux 两个系统来做示例展示,有人会有疑问了:为什么要说 Windows 版的 ? 目前市面上还是有很多 Windows 服务器的,应用于传统行业、政府结构、医疗行业 等等;两个系统下的情况都演示下,有备无患
青石路
2020/10/09
2.7K0
关于CPU使用率飙升,我们需要了解什么?
现在分时操作系统是通过循轮方式分配时间片进行进程调度的,如果进程在等待或阻塞,不会造成 CPU 资源使用。线程称为轻进程,共享进程资源,关于线程的调度,CPU 对于线程也是分时调度。而在 Java 中,线程的调用由 JVM 负责,线程的调度一般有两种模式,分时调度和抢占式调度。
李肖遥
2020/06/24
5.3K0
关于CPU使用率飙升,我们需要了解什么?
Java 服务遇到线上问题怎么办?这样排查很赞!
线上问题不同于开发期间的 bug,与运行时环境、压力、并发情况、具体的业务相关。对于线上的问题利用线上环境可用的工具,收集必要信息 对定位问题十分重要。
码农架构
2020/10/29
1.2K0
Java 服务遇到线上问题怎么办?这样排查很赞!
JVM 问题排查工具
Java 开发人员肯定都知道 JDK的 bin 目录中有 “java.exe”、“javac.exe” 这两个命令行工具。下面主要介绍一些监视虚拟机和故障处理的工具。
Java架构师必看
2021/05/14
5570
JVM 问题排查工具
相关推荐
记一次 JVM CPU 使用率飙高问题的排查过程
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档