news 2026/6/3 8:49:01

Java 应用 CPU 过高排查全流程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Java 应用 CPU 过高排查全流程

Java CPU 飙高90% 都是业务代码死循环、频繁GC、密集计算、死锁/自旋导致的,排查有标准、固定、可落地的流程,不需要猜。

下面给你一套从登录服务器到定位代码行的完整实战步骤,直接照着做就能定位问题。


一、快速定位:哪个进程占用 CPU 最高

1. 查看系统整体 CPU 占用

top

找到CPU 使用率最高的 Java 进程 PID(第一列)。


二、精准定位:这个进程里哪个线程在耗 CPU

2. 查看该 Java 进程内的线程排行

top-H-p<PID>

会列出该 Java 进程内部所有线程,找到CPU 最高的线程 TID

3. 把线程 TID 转成 16 进制(JVM 栈用 16 进制标识线程)

printf"%x\n"<TID>

得到一个16 进制线程 ID(记下来,后面要用)。


三、抓取线程栈:找到耗 CPU 的代码

4. 导出 Java 线程栈

jstack<PID>>stack.log

5. 在栈文件里搜索刚才的 16 进制线程 ID

grep-A20<16进制TID>stack.log

-A 20 表示显示后 20 行,直接就能看到:

  • 线程名称
  • 线程状态
  • 具体耗 CPU 的代码类、方法、行号

四、最常见的 4 种 CPU 飙高原因(一看栈就知道)

1. 死循环 / 无限递归(最常见)

栈特征:

com.xxx.service.UserService.getUserList(UserService.java:88)

代码一直卡在同一行,没有阻塞,一直在跑。

2. 频繁 Full GC / Young GC

栈特征:

VM Thread GC task thread

排查命令:

jstat-gc<PID>100010

如果FGC(FullGC次数)每秒涨好几次,就是内存泄漏/GC 导致 CPU 高。

3. 大量锁自旋 / CAS 空循环

栈特征:

sun.misc.Unsafe.park java.util.concurrent.locks

线程处于RUNNABLE 但一直在自旋

4. 密集计算(加密、循环、正则、JSON 解析)

栈会停留在:

  • 加密工具类
  • 复杂 for 循环
  • 正则表达式(灾难性回溯)
  • JSON/XML 序列化

五、1 分钟快速排查脚本(直接复制用)

把下面内容保存为check_cpu.sh,一键定位耗 CPU 代码行:

#!/bin/bashPID=$1jstack$PID>stack.logTID=$(top-b-n1-H-p$PID|grepjava|sort-nrk9|head-1|awk'{print $1}')HEX_TID=$(printf"%x\n"$TID)echo"高耗CPU线程16进制:$HEX_TID"grep-A30$HEX_TIDstack.log

使用:

chmod+x check_cpu.sh ./check_cpu.sh<Java进程PID>

六、定位到代码后怎么解决?

  1. 死循环:检查循环条件、边界值、迭代逻辑
  2. 频繁GC:查内存泄漏(用 jmap 堆 dump)、调整堆大小
  3. 锁自旋:改用公平锁、减少锁竞争、异步化
  4. 密集计算:异步执行、分片、缓存结果、优化算法

七、必备工具(无需安装)

Linux + JDK 自带,生产环境直接用

  • top:看进程/线程 CPU
  • jstack:线程栈
  • jstat:GC 监控
  • jmap:堆内存 dump(定位内存泄漏)

总结

  1. top找 Java 进程 PID
  2. top -H找耗 CPU 线程 TID
  3. 转 16 进制
  4. jstack + grep定位代码行
  5. 按栈特征判断是死循环/GC/锁/密集计算

整个流程不重启、不影响业务、1~3 分钟定位根因

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

ai赋能:让快马智能生成符合jdk1.8函数式编程风格的业务代码

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 请作为ai编程助手&#xff0c;帮我设计并生成一个简单的电商促销活动计算引擎的核心模块。要求使用jdk1.8编写。场景&#xff1a;有一组商品和一套促销规则&#xff08;如满减、折…

作者头像 李华
网站建设 2026/6/3 8:43:14

BetterJoy深度解析:如何让Switch手柄在PC上完美运行的技术奥秘

BetterJoy深度解析&#xff1a;如何让Switch手柄在PC上完美运行的技术奥秘 【免费下载链接】BetterJoy Allows the Nintendo Switch Pro Controller, Joycons and SNES controller to be used with CEMU, Citra, Dolphin, Yuzu and as generic XInput 项目地址: https://gitc…

作者头像 李华
网站建设 2026/6/3 8:42:10

海外消费品展会参展商评估分析与决策参考

“海外消费品展会的参展商评估&#xff0c;绝不仅是比较展位价格&#xff0c;而应是一场基于‘精准匹配、成本可控、风险规避与效果优化’八维模型的系统性决策。”对于寻求通过参展打开或巩固国际市场的企业而言&#xff0c;选错展会或合作伙伴&#xff0c;不仅意味着资金与时…

作者头像 李华
网站建设 2026/6/3 8:35:47

LeetCode 链表

LeetCode 链表简单题 可直接本地运行的 JS 版本&#xff0c;每道题都包含&#xff1a;链表节点构造函数数组转链表 / 链表转数组&#xff08;方便本地调试&#xff09;完整可运行代码测试用例你直接复制到浏览器控制台 / Node.js 就能跑&#xff0c;不用改任何东西&#xff01…

作者头像 李华