当前位置: 首页 > news >正文

在服务器排查java某个线程导致CPU飙高教程

🧩 第一步:确定是哪个线程占用 CPU 高

1.1 使用 tophtop 命令查看高 CPU 的 Java 进程
top -Hp <Java进程PID>
  • -H 表示显示线程级别;
  • -p 后面跟 Java 主进程的 PID;
  • 你会看到各个线程的 CPU 使用情况,找出使用率高的线程。
1.2 记录高 CPU 的线程 ID(LWP)

假设你看到某个线程的 PID 是 12345,这其实是 线程的 LWP(Light Weight Process ID)

你需要将这个十进制的 LWP 转换成十六进制(用于下一步匹配线程):

printf "%x\n" 12345

输出可能是:3039(注意不带0x


🔍 第二步:用 jstack 找出对应线程的 Java 栈信息

jstack <Java进程PID> > jstack.log

然后在输出的 jstack.log 中搜索刚才的十六进制线程 ID(注意是小写):

grep -A 30 "nid=0x3039" jstack.log

这段输出中就是该线程的 Java 调用栈,可以看到是哪个类、哪个方法在运行。


✅ 示例流程总结

  1. 查看 Java 进程 PID(假设是 2222):

    ps -ef | grep java
    
  2. 查看线程占用:

    top -Hp 2222
    
  3. 找到线程号(如 12345),转换为 hex:

    printf "%x\n" 12345   # 输出 3039
    
  4. 导出线程栈并搜索对应线程:

    jstack 2222 > jstack.log
    grep -A 30 "nid=0x3039" jstack.log
    

🧠 补充建议

  • 使用 jstack 多次采样,可以观察线程是否卡在某处不动;

  • 对生产环境建议使用 jcmd(更安全):

    jcmd <Java进程PID> Thread.print > jstack.log
    
  • 如果你使用的是容器环境,请注意容器内可能需要安装 procpsopenjdkbin 工具。


http://www.xdnf.cn/news/434539.html

相关文章:

  • 前端实用工具|JavaScript 身份证号合法性校验工具类全解析
  • openFeign远程调用
  • 需求跟踪矩阵准确性的5大策略
  • 基于vllm-ascend的华为atlas大模型部署
  • OrangePi Zero 3学习笔记(Android篇)8 - OpenOCD
  • 什么是原码和补码
  • 【JavaScript】JavaScript实现大数相乘
  • ebook2audiobook开源程序使用动态 AI 模型和语音克隆将电子书转换为带有章节和元数据的有声读物。支持 1,107+ 种语言
  • day013-软件包管理-实战
  • 门禁人脸识别系统详细技术文档
  • 索尼(sony)摄像机格式化后mp4的恢复方法
  • 【基础】Windows开发设置入门2:Windows 终端Windows Terminal
  • FHQ平衡树
  • MCP Server多节点滚动升级一致性治理
  • 怎样将课程表导入手机日历,每天提醒上课?
  • 【Linux系列】dd 命令的深度解析与应用实践
  • Spring框架请求注解
  • 从生产流程到故障处理,R²AIN SUITE 如何为制造业“减负”?
  • Transformer架构介绍+从零搭建预训练模型项目
  • ai讲ping
  • 【C盘空间不足怎么办】
  • git merge和git rebase
  • 科学养生:构建现代健康生活新范式
  • LamaIndex rag(增强检索)入门
  • MySQL:关系模型的基本理论
  • 以价值为导向的精准数据治理实践,赋能业务决策
  • 基于STM32、HAL库的SGTL5000XNLA3R2音频接口芯片驱动程序设计
  • 数据库--处理模型(Processing Model)
  • DCDC输入4.5V-65V耐压 5A电流异步降压芯片SL3075兼容替换TPS54560
  • 【蓝桥杯嵌入式】【复盘】第13届国赛真题