news 2026/5/11 18:12:36

系统突然出现 CPU 飙高,你如何排查?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
系统突然出现 CPU 飙高,你如何排查?

场景二:如果系统突然出现 CPU 飙高,你如何排查?

CPU 飙高是线上非常紧急的故障。排查思路需要分两步走:先通过 Linux 命令定位是哪个进程、哪个线程出了问题,再结合 JVM 工具分析具体的代码原因。

第一步:Linux 系统层面的快速定位

  1. 确认负载情况:使用top命令查看系统整体负载(load average)和 CPU 使用率。按P键让进程按 CPU 占用率降序排列,迅速找到占用 CPU 最高的 Java 进程 PID。
  2. 定位具体线程:执行top -Hp <PID>,查看该 Java 进程下所有线程的 CPU 占用情况,找到占用 CPU 最高的线程 ID(TID)。
  3. 转换线程 ID:将找到的线程 ID(十进制)转换为十六进制,命令为printf "%x\n" <TID>。因为后续 JVM 堆栈中显示的线程 ID 是十六进制的。

第二步:JVM 应用层面的深度分析

  1. 导出线程堆栈:使用jstack <PID> | grep <十六进制TID> -A 20命令,打印出该高负载线程的堆栈信息。
  2. 分析堆栈信息(核心)
    • 业务代码死循环/复杂计算:如果堆栈指向了你自己的业务代码(如某个while循环、复杂的正则匹配、JSON 序列化等),说明是代码逻辑导致了 CPU 飙升。
    • 频繁 Full GC:如果堆栈中大量出现VM ThreadGC task thread,且 CPU 飙高,通常意味着系统内存不足,JVM 在疯狂进行 Full GC(即“GC 抖动”)。此时需要配合jstat -gcutil <PID> 1000观察 GC 频率,并使用jmap或 MAT 工具分析堆内存快照,排查是否存在内存泄漏或大对象分配。
    • 锁竞争激烈:如果堆栈显示大量线程处于BLOCKED状态,或者都在等待同一把锁,说明存在严重的锁竞争,导致 CPU 消耗在上下文切换上。

总结排查口诀
top找进程 ->top -Hp找线程 ->printf转十六进制 ->jstack抓堆栈 -> 分析代码逻辑或 GC 状况。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/11 18:00:11

HTML DOM 属性

HTML DOM 属性 引言 HTML DOM&#xff08;文档对象模型&#xff09;是HTML文档的编程接口&#xff0c;它允许开发者通过JavaScript操作HTML文档的各个部分。在DOM中&#xff0c;每一个HTML元素都对应一个DOM对象&#xff0c;而属性则是这些对象的一部分。了解并掌握HTML DOM属性…

作者头像 李华
网站建设 2026/5/11 17:57:19

完整指南:用FFXIV TexTools轻松定制你的FF14角色外观

完整指南&#xff1a;用FFXIV TexTools轻松定制你的FF14角色外观 【免费下载链接】FFXIV_TexTools_UI 项目地址: https://gitcode.com/gh_mirrors/ff/FFXIV_TexTools_UI FFXIV TexTools是一款专业的《最终幻想14》游戏模型与贴图修改工具&#xff0c;为玩家提供强大的角…

作者头像 李华
网站建设 2026/5/11 17:53:59

STM32串口中断接收的“坑”与优化:从原子式接收到DMA+空闲中断

STM32串口中断接收的“坑”与优化&#xff1a;从原子式接收到DMA空闲中断 在嵌入式开发中&#xff0c;串口通信是最基础也最常用的外设之一。对于STM32开发者来说&#xff0c;串口中断接收数据是入门必修课&#xff0c;但很多人在实际项目中会遇到数据丢失、接收不稳定等问题。…

作者头像 李华