【场景题】如何排查CPU偏高的问题

为了解决CPU偏高的问题,我们首先看一下每一个进程的CPU占用情况,使用命令Top

可以看见是进程id为2266的进程里面的java程序,占用了CPU90%使用情况

所以我们需要找到是哪一个代码导致的这样的情况,由于代码是线程执行的,而线程是进程的执行的最小单元,所以我们需要在当前的进程找到哪一个线程执行的代码,来定位这个问题2

我们可以根据ps 命令+grep命令来查看和定位当前进程下的所有线程

bash 复制代码
ps -eH -o pid,tid,%cpu | grep 2266

这里是对命令的解释:

  • ps: 是一个显示进程信息的命令。
  • -e: 表示列出所有进程。
  • -H: 表示显示进程中的线程(轻量级进程LWP)。如果你只对主进程信息感兴趣,可以省略此选项。
  • -o pid,tid,%cpu: 表示输出格式,显示进程ID(pid)、线程ID(tid)和CPU使用率(%cpu)。
  • |: 是管道符号,用于将前一个命令的输出作为后一个命令的输入。
  • grep 2266: 是搜索工具,用于在ps命令的输出中搜索包含"2266"的行。

由此可以看到是2266进程下的2276线程占用的CPU

然后我们可以通过jstack命令,可以获得 Java 虚拟机(JVM)中所有线程的堆栈跟踪信息。这些信息对于调试多线程应用程序中的问题至关重要。

jstack+进程id就可以查看当前进程下的所有线程信息

但是 jstack中显示的线程和进程id是十六进制的,所以我们需要将十六进制转换为十进制

可以通过命令

bash 复制代码
printf "%x\n" 2276

由此可以找8e4的线程来进行查看

由此可以看见是这个线程下的代码第九行报错了,所以我们需要在Application.java文件中找一下第九行代码看一下

由此我们就可以排查出问题的原因

相关推荐
ShineWinsu几秒前
对于Linux:文件操作以及文件IO的解析
linux·c++·面试·笔试·io·shell·文件操作
ZKNOW甄知科技几秒前
数智同行:甄知科技2026年Q1季度回顾
运维·服务器·人工智能·科技·程序人生·安全·自动化
-SGlow-几秒前
Linux相关概念和易错知识点(52)(基于System V的信号量和消息队列)
linux·运维·服务器
jikemaoshiyanshi2 分钟前
B2B企业GEO服务商哪家好?深度解析径硕科技(JINGdigital)及其JINGEO产品为何是首选
大数据·运维·人工智能·科技
江畔何人初2 分钟前
TCP的三次握手与四次挥手
linux·服务器·网络·网络协议·tcp/ip
跨境麦香鱼4 分钟前
Playwright vs Puppeteer:2026自动化任务与爬虫工具如何选?
运维·爬虫·自动化
洒家肉山大魔王7 分钟前
PKI/CA X.509证书的基础应用与解读
服务器·https·密码学·数字证书
xingyuzhisuan14 分钟前
Blender渲染加速:4090服务器OptiX后端性能提升50%
运维·服务器·性能优化·gpu算力
Trouvaille ~16 分钟前
【MySQL篇】数据库操作:从创建到管理
linux·数据库·mysql·oracle·xshell·ddl
2401_8396339118 分钟前
Flutter 框架跨平台鸿蒙开发 - 声音密码锁
服务器·flutter·华为·harmonyos