当前位置: 首页 > 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.dtcms.com/a/187850.html

相关文章:

  • 软件I2C
  • MCP-RAG 服务器:完整设置和使用指南
  • 图片的require问题
  • 前端工程化:从 Webpack 到 Vite
  • React+Webpack 脚手架、前端组件库搭建
  • 华为鸿蒙电脑能否作为开发机?开发非鸿蒙应用?
  • 力扣第156场双周赛
  • Angular | 利用 `ChangeDetectorRef` 解决 Angular 动态显示输入框的聚焦问题
  • linux入门学习(介绍、常用命令、vim、shell)
  • Leetcode 3543. Maximum Weighted K-Edge Path
  • linux系统如何将采集的串口数据存储到txt
  • aardio - 虚表 —— CheckBox列使用方法
  • 【HBase整合Hive】HBase-1.4.8整合Hive-2.3.3过程
  • 重构门店网络:从“打补丁“到“造地基“的跨越
  • 测试集群的功能-执行wordcount程序
  • 什么是 SSM 框架?
  • Nature图形复现—两种快速绘制热图的方法
  • c# UTC 时间赋值注意事项
  • 为什么GOOSE通讯需要MAC地址?
  • 游戏资源传输服务器
  • Android中RelativeLayout相对布局使用详解
  • 数字IC后端实现教程 | Early Clock Flow和Useful skew完全不是一个东西
  • 按键精灵ios脚本新增元素功能助力辅助工具开发(一)
  • 【PyTorch】深度学习实践——第二章:线性模型
  • LVGL输入设备管理
  • Dinky 安装部署并配置提交 Flink Yarn 任务
  • 11. CSS从基础样式到盒模型与形状绘制
  • C++学习之路,从0到精通的征途:继承
  • 基于脑功能连接组和结构连接组的可解释特定模态及交互图卷积网络|文献速递-深度学习医疗AI最新文献
  • 在虚拟机Ubuntu18.04中安装NS2教程及应用