【Java面试】服务器CPU使用率飙升,如何排查?

简介

如果碰到服务器CPU使用率飙升,居高不下,该如何定位排查问题呢?

本文带大家实践一下,在使用Java时,碰到服务器CPU飙升该如何定位到具体的问题代码!

准备工作

1、代码准备

Main.java

java 复制代码
public class Main {
    public static void main(String[] args) {
        System.out.println("Hello world!");
        circle();
    }

    public static void circle() {
        while (true) {

        }
    }
}

这里写一个circle方法,方法里面是一个while死循环。

2、在服务器上编译运行代码

java 复制代码
javac Main.java
java Main

查看CPU占用进程

bash 复制代码
top

找到异常的进程号

定位异常线程

通过命令

bash 复制代码
top -Hp <pid>

定位异常线程

线程号转为16进制

bash 复制代码
printf %x <tid>

jstack定位异常代码

bash 复制代码
jstack <pid> |grep -A 200 <16进制tid>

根据类名和行号,即可定位到问题代码

相关推荐
逝水无殇1 小时前
C# 异常处理详解
开发语言·后端·c#
懒鸟一枚2 小时前
深入理解 Linux 内存、Swap 交换分区与分页机制的关系
java·linux·数据库
我命由我123453 小时前
执行 Gradle 指令报错,无法将“grep”项识别为 cmdlet、函数、脚本文件或可运行程序的名称
android·java·java-ee·android studio·android jetpack·android-studio·android runtime
考虑考虑4 小时前
Sentinel安装
java·后端·微服务
IT_陈寒4 小时前
SpringBoot自动配置失灵?你可能忘了这个关键注解
前端·人工智能·后端
碎碎念_4924 小时前
SpringBoot + Vue 前后端分离从 0 到 1 完整环境配置流程
vue.js·spring boot·后端
逝水无殇4 小时前
C# 文件的输入与输出详解
开发语言·数据库·后端·c#
YIAN4 小时前
从手写 Agent 工具到 MCP 协议:一文搞懂大模型跨进程跨语言工具调用
后端·agent·mcp
小兔崽子去哪了5 小时前
Docker 删除镜像后磁盘空间没有释放?
后端·docker·容器
凤凰院凶涛QAQ5 小时前
《Java版数据结构 & 集合类剖析》栈与队列:“push/pop 是栈的灵魂,offer/poll 是队列的骨架——四组 API,两种人生”
java·开发语言·数据结构