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

使用jstack排查CPU飙升的问题记录

        最近,看到短视频传播了一个使用jstack来协助排查CPU飙升的案例。我也是比较感兴趣,参考了视频博主的流程,自己做了下对应案例的实战演练,在此,想做一下,针对相关问题模拟与排查演练的实战过程记录。

       案例中所使用的DEMO代码,我已经放到了以下的代码仓库中,有需要的同学,可以自行下载与学习演练。代码仓库地址:https://github.com/AlickLiubc/cpu-problems-demo

        在演练代码中,主要通过一段死循环,来模拟了系统CPU飙升的代码原因。

具体步骤:

步骤1:

将代码打成jar包并放置在Linux的系统运行环境中运行:

mvn clean package -DskipTests
nohup java -jar cpu-problems-demo-1.0-SNAPSHOT.jar > /dev/null 2> /dev/null &

步骤2:

通过浏览器打开与观察接口的问题现象,如下图所示,浏览器处于不断加载的过程中:

步骤3:

使用top命令,查看占用CPU比较高的进程ID(十进制),可以看到PID=16013的进程占用CPU很高。

top

步骤4:

进一步使用top命令查询占用CPU比较高的线程ID

top -H -p 16013

此时,可以得到占用CPU很高的线程ID(十进制),PID=16029。

步骤5:

将步骤4中得到的十进制的线程ID转换为十六进制值为0x3e9d:

printf "0x%x\n" 16029

步骤6:

结合以上步骤中得到的进程ID(十进制)与线程ID(十六进制),可以找到问题源头的相关代码信息:

jstack 16013 | grep 0x3e9d-A 20

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

相关文章:

  • CMap应用场景和例子
  • ABP-Book Store Application中文讲解 - Part 10: Book to Author Relation
  • 【Pandas】pandas DataFrame reset_index
  • HTTP常见的请求方法、响应状态码、接口规范介绍
  • c#开发AI模型对话
  • 回归任务和分类任务损失函数详解
  • 性能剖析:在 ABP 框架中集成 MiniProfiler 实现性能可视化诊断
  • 学习笔记(24): 机器学习之数据预处理Pandas和转换成张量格式[2]
  • 以人类演示视频为提示,学习可泛化的机器人策略
  • 鸿蒙仓颉语言开发实战教程:商城登录页
  • [网页五子棋][匹配模块]实现胜负判定,处理玩家掉线
  • 【C++】std::wstring` 和 C# 的 `String`(全称 `System.String`)
  • HRI-2025 | 大模型驱动的个性化可解释机器人人机交互研究
  • .Net Framework 4/C# 面向对象编程进阶
  • 机器学习基础(四) 决策树
  • Spitfire:Codigger 生态中的高性能、安全、分布式浏览器
  • Java 线程池原理详解
  • Rust 学习笔记:Box<T>
  • 更新 Docker 容器中的某一个文件
  • 根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要
  • ffmpeg(三):处理原始数据命令
  • 旅游微信小程序制作指南
  • Webpack常见的插件和模式
  • IOS 打包账号发布上传和IOS Xcode证书配置
  • .Net Framework 4/C# 属性和方法
  • VS代码生成工具ReSharper v2025.1——支持.NET 10和C# 14预览功能
  • 【设计模式-4.9】行为型——命令模式
  • 解决Required request part ‘file‘ is not present
  • StarRocks与Apache Iceberg:构建高效湖仓一体的实时分析平台
  • OPENCV重点结构体Mat的讲解