0

0

如何排查Java线上系统的CPU占用过高_top命令与jstack结合定位问题线程

P粉602998670

P粉602998670

发布时间:2026-03-11 15:09:27

|

451人浏览过

|

来源于php中文网

原创

top -h 可定位高 cpu 的 os 线程 pid,需转为十六进制后用 jstack 匹配 nid;若未匹配则线程可能已退出或为 gc 线程,应结合 jstat -gc 分析;jstack 仅拍快照易遗漏瞬时问题,推荐 pidstat 或 async-profiler;注意 safepoint 影响及 native 层问题需 perf/strace 辅助。

如何排查java线上系统的cpu占用过高_top命令与jstack结合定位问题线程

top -H 看出哪个线程在吃 CPU

Java 进程本身 CPU 高,不代表 Java 代码有问题——得先确认是哪个 OS 线程在狂跑。top -H 是第一步,它把线程(LWP)按 CPU 占用从高到低列出来。注意切换到线程视图后按 P(大写)可以按 CPU 排序,别用 T(那是按运行时间)。找到那个 %CPU 持续 90+ 的 pid,记下来,比如 12345

常见错误:直接对 Java 进程 PID 执行 jstack,但没把线程 ID 转成十六进制——JVM 线程栈里显示的是 16 进制的 nid,而 top -H 给的是十进制。漏这步就对不上号。

  • printf "%x\n" 12345 → 得到 3039
  • 再搜 jstack <java-pid> | grep -A 10 "nid=0x3039"</java-pid>
  • 如果没匹配上,大概率是线程已退出,或 GC 线程(如 G1 Conc#0)临时飙高,需结合 jstat -gc 看是否正在频繁 CMS/G1 并发阶段

jstack 输出里怎么快速定位可疑线程栈

jstack 日志里真正有用的不是“RUNNABLE”状态本身,而是它卡在哪一行、调了什么、有没有死循环或同步争用。重点关注三类栈:

  • 无限循环体:比如 while (true) { ... } 且没 sleep/condition wait
  • 同步块内耗时操作:比如 synchronized (obj) { httpClient.execute(...) } —— 锁住别人还自己慢
  • 正则或 JSON 解析卡住:像 Pattern.compile(".*+.*") 这种灾难性正则,或 ObjectMapper.readValue() 解析超大字符串

别被 java.lang.Thread.sleepUnsafe.park 迷惑——这些是正常阻塞;真要盯的是连续多帧都在同一行、或反复调用同个工具方法的栈。

IBM Watson
IBM Watson

IBM Watson文字转语音

下载

立即学习Java免费学习笔记(深入)”;

为什么 jstack 有时抓不到高 CPU 线程?

不是 jstack 失效,是它只拍快照,而高 CPU 线程可能一闪而过。尤其当问题是周期性毛刺(比如每分钟一次的定时任务触发死循环),单次 jstack 很容易错过。

  • pidstat -t -p <pid> 1 30</pid> 每秒采样 30 次,导出 CSV 后看线程 CPU 波峰对应的时间点
  • 配合 async-profiler 录制 CPU 火焰图:./profiler.sh -e cpu -d 30 -f /tmp/flame.svg <pid></pid>,比 jstack 更准、不依赖线程状态
  • 注意 JDK 版本:JDK 8u60+ 才支持 jstack -l 显示锁信息;老版本看不到 waiting to lock 细节

线上不敢随便 jstack?得控制影响范围

jstack 对 JVM 是安全的,但频繁执行或对大堆进程(>10G)执行,会触发 safepoint,导致所有线程停顿——表现为接口 RT 突增、心跳超时、甚至注册中心掉线。

  • 单次执行加 -l-F(强制)非常危险,仅限进程无响应时用;日常排查禁用 -F
  • 避免在高峰期跑:jstack <pid> > /tmp/jstack.out 2>&1</pid>,重定向输出,别让终端卡住
  • 更轻量替代:jcmd <pid> VM.native_memory summary</pid> 查内存分配热点,或 jstat -gc <pid></pid> 看 GC 是否异常频繁

最常被忽略的一点:很多“CPU 高”其实是 native 层问题,比如 JNI 调用的 C 库死循环、Log4j2 的异步日志队列满后退化为同步刷盘、甚至容器 cgroup 限制导致线程调度失衡——这时候 jstack 根本看不出问题,得切到 perf top -p <pid></pid>strace -p <pid></pid> 看系统调用热点。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

454

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

546

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

334

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

82

2025.09.10

while的用法
while的用法

while的用法是“while 条件: 代码块”,条件是一个表达式,当条件为真时,执行代码块,然后再次判断条件是否为真,如果为真则继续执行代码块,直到条件为假为止。本专题为大家提供while相关的文章、下载、课程内容,供大家免费下载体验。

105

2023.09.25

printf用法大全
printf用法大全

php中文网为大家提供printf用法大全,以及其他printf函数的相关文章、相关下载资源以及各种相关课程,供大家免费下载体验。

76

2023.06.20

fprintf和printf的区别
fprintf和printf的区别

fprintf和printf的区别在于输出的目标不同,printf输出到标准输出流,而fprintf输出到指定的文件流。根据需要选择合适的函数来进行输出操作。更多关于fprintf和printf的相关文章详情请看本专题下面的文章。php中文网欢迎大家前来学习。

304

2023.11.28

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

760

2023.08.03

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

3

2026.03.11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 4.3万人学习

C# 教程
C# 教程

共94课时 | 11.1万人学习

Java 教程
Java 教程

共578课时 | 80.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号