【场景题】如何排查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文件中找一下第九行代码看一下

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

相关推荐
码农小韩13 分钟前
基于Linux的C++学习——指针
linux·开发语言·c++·学习·算法
wdfk_prog28 分钟前
[Linux]学习笔记系列 -- [fs]seq_file
linux·笔记·学习
Jay Chou why did1 小时前
wsl安装完无法进入wsl
linux
石头5302 小时前
Rocky Linux 9.6 docker k8s v1.23.17 kubeadm 高可用部署文档
linux
松涛和鸣2 小时前
49、智能电源箱项目技术栈解析
服务器·c语言·开发语言·http·html·php
凉、介2 小时前
SylixOS 中的 Unix Socket
服务器·c语言·笔记·学习·嵌入式·sylixos
RisunJan2 小时前
Linux命令-ipcs命令(报告进程间通信(IPC)设施状态的实用工具)
linux·运维·服务器
春日见3 小时前
控制算法:PP(纯跟踪)算法
linux·人工智能·驱动开发·算法·机器学习
HABuo3 小时前
【Linux进程(四)】进程切换&环境变量深入剖析
linux·运维·服务器·c语言·c++·ubuntu·centos