【面试】线上Java程序占用 CPU 过高请说一下排查方法?

这篇具有很好参考价值的文章主要介绍了【面试】线上Java程序占用 CPU 过高请说一下排查方法?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

这个问题可以说是 Java 面试的高频面试题了,有很多面试官都喜欢问这个问题,问题可能是下面这样的。

线上一台服务器 CPU 使用率100% 了,如果你碰到这样的情况,如何排查并找到问题原因?

这就是一个套路题,所谓套路题就是有标准的套路解法的,掌握了套路,不仅能解决面试官,还能解决问题。不然真的就掉进套路里了。
当我们真碰到这个问题的时候应该怎么排查呢?

模拟一个高 CPU 场景

先用一段程序创建几个线程,将其中一个线程设置成高 CPU 使用率的。

public static void main(String[] args)  {
  for (int i = 0; i < 10; i++) {
    Thread thread = new Thread(() -> {
      System.out.println(Thread.currentThread().getName());
      try {
        Thread.sleep(30 * 60 * 1000);
      }catch (Exception e){
        e.printStackTrace();
      }
    });
    thread.setName("thread-" + i);
    thread.start();
  }

  Thread highCpuThread = new Thread(() -> {
    int i = 0;
    while (true) {
      i++;
    }
  });
  highCpuThread.setName("HighCpu");
  highCpuThread.start();
}

运行这段程序后,前面 10 个线程都处于休眠状态,只有最后一个线程会持续的占用 CPU 。
运行这段程序,然后就可以开始一些列的操作来发现问题原因了。

排查步骤

第一步,使用 top 找到占用 CPU 最高的 Java 进程

在真实环境中,首先要确认是不是 Java 程序造成的,如果有系统监控工具,可能会直接在预警信息里告诉你是有哪个进程造成的,但也有可能不知道,需要我们手动排查。

如果是在面试场景中,这个问题可能不需要确认,毕竟 Java 面试,面试官可能直接就告诉你是 Java 占用的 CPU 过高。

这一步也非常简单,就是一个 top命令而已,基本上所有同学都用过这个命令吧。
【面试】线上Java程序占用 CPU 过高请说一下排查方法?

使用 top命令发现占用 CPU 99.7% 的线程是 Java 进程,进程 PID 为 13731。

第二步,用 top -Hp 命令查看占用 CPU 最高的线程

上一步用 top命令找到了那个 Java 进程。那一个进程中有那么多线程,不可能所有线程都一直占着 CPU 不放,这一步要做的就是揪出这个罪魁祸首,当然有可能不止一个。

执行top -Hp pid命令,pid 就是前面的 Java 进程,我这个例子中就是 13731 ,完整命令为:
top -Hp 13731,执行之后的效果如下
【面试】线上Java程序占用 CPU 过高请说一下排查方法?

可以看到占用 CPU 最高的那个线程 PID 为 13756。

然后将 13756转换为 16 进制的,后面会用到,可以用在线进制转换的网站直接转换,转换结果为 0x35bc

第三步,保存线程栈信息

当前 Java 程序的所有线程信息都可以通过 jstack命令查看,我们用jstack命令将第一步找到的 Java 进程的线程栈保存下来。

jstack 13731 > thread_stack.log

第四步,在线程栈中查找最贵祸首的线程

第二步已经找到了这个罪魁祸首的线程 PID,并把它转换成了 16 进制的,第三步保存下来的线程栈中有所有线程的 PID 16 进制信息,我们在线程栈中查找这个16进制的线程 id (0x35bc)。
【面试】线上Java程序占用 CPU 过高请说一下排查方法?

怎么样,现在一目了然了,线程名称、线程状态、以及哪行代码消耗了最多的 CPU 都很清楚了。文章来源地址https://www.toymoban.com/news/detail-490253.html

到了这里,关于【面试】线上Java程序占用 CPU 过高请说一下排查方法?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 解决vscode的cpptools占用cpu过高问题

    原因就是C/C++扩展的问题,禁用C/C++就可以解决。具体原因是右键查找代码的引用/声明等操作比较消耗CPU。 如何使用C/C++扩展的同时还能够降低cpu过高的问题是目前的任务,解决方法如下。 以下经试验没效果,(搜索配置项并修改): x     VScode设置 Follow Symlinks 去掉勾选

    2024年02月11日
    浏览(86)
  • macOS mds_stores CPU占用过高

    当 macOS 的 mds_stores 进程占用过高的 CPU 使用率时,可能是由于 Spotlight 索引过程导致的。Spotlight 是 macOS 中用于搜索和索引文件的系统服务,而 mds_stores 是其索引进程之一。 以下是一些可能的解决方法: 等待一段时间:如果 mds_stores 进程正在进行大量的索引工作,可能需要一

    2024年02月16日
    浏览(43)
  • Linux命令及CPU占用过高的定位分析思路

    不要使用vim打开大文件, vim会一次性读取所有内容到内存,容易造成宿主机内存溢出 。 打开文件前,可以使用 du -h命令查看文件大小 。一般,100MB以下为宜。 j 向下 30j 向下移动30行 k 向上 h 向左 l 向右 0 到行首 ^ 到行首第一个字符,如果前面有空格的话 $ 到行尾 gg 快速到

    2024年02月03日
    浏览(47)
  • MySQL 故障诊断:MySQL 占用 CPU 过高问题定位及优化

    CPU 占用过高常见现象 在使用 MySQL 的过程中会遇到各种瓶颈问题,常见的是 IO 瓶颈,但是有时候会出现服务器 CPU 使用率超过 100%,应用页面访问慢,登录服务器负载很高。而导致这个问题竟然是 MySQL 进程,按理说如果 MySQL 运行稳定,服务器的 CPU 资源并不会跑满,如果出现

    2024年04月25日
    浏览(37)
  • Vmmem进程(WSL)占用CPU或内存资源过高的解决办法

            有没有一瞬间,在开启docker或打开虚拟机时,内存瞬间飚增,进行查看进程消耗是一个Vmmem的进程在作祟,那么Vmmem是什么呢,又如何进行限制呢!         Vmmem: 是一个系统合成的虚拟进程,用于表示虚拟机小航的内存和CPU资源。换句话说,您看到的Vmmem消耗

    2024年02月13日
    浏览(76)
  • 排查Docker容器Java程序CPU过高问题以及处理方法

    因为Docker里java程序运行环境是用的jre,没有top和jstack命令,所以要在容器里安装top和jattach,来查看和导出线程信息。 系统:Debian10 镜像:openjdk:8u275-jre-slim-buster 容器ID:99abe55a98dc 一.安装top:     1.进入容器:       2.因为官方镜像地址太慢,所以 修改源地址:https://develop

    2024年02月11日
    浏览(67)
  • Win10关闭自动更新的方法和影响(Windows modules installer worker cpu占用过高)

    目录 问题描述: Windows modules installer worker是什么? Win10关闭自动更新的方法: Win10关闭自动更新的影响: 问题描述: 有时我们在使用电脑的过程中会突然出现电脑运行过慢,发热,风扇噪音等问题,当我们查看任务管理器时很可能发现Windows Modules Installer Worker进程占用率很

    2024年02月13日
    浏览(46)
  • 关闭Microsoft Compatibility Telemetry服务解决VScode CPU内存占用过高导致电脑卡顿(实测有效)

    解决方法: 关闭Microsoft Compatibility Telemetry服务。 Microsoft Compatibility Telemetry是微软下的一个监测数据收集服务,如果加入Microsoft客户反馈改善计划,该服务就会在监测系统异常并收集反馈到微软,禁用Microsoft Compatibility Telemetry任务计划即可解决问题。 1、打开开始菜单,找到

    2024年02月11日
    浏览(44)
  • Windows10 explorer资源管理器长时间CPU占用过高问题的调试解决过程————从懵到懂

    版本:windows10专业版 版本号:21H2 操作系统内部版本:19044.1586 使用微软提供的工具:ProcessExplorer 查看explorer进程的栈、使用率信息(使用方法请自行百度)。 问题测试方法: 1).为了便于观察,使用快捷键windows + E 快速 打开10个资源管理器。 2).打开ProcessExplorer 查看explorer进

    2024年02月05日
    浏览(42)
  • 【面试】线上 CPU 100% 问题排查

    回答套路一般为:线上服务器没有排查过,线上服务器只有运维才有操作权限。在平时开发的时候,在测试服务器上排查过。 2.1、将代码打包成 jar 包 参考: 点我 2.2、传到服务并运行 运行好的效果如下 3.1、拿到进程 id 通过 top 命令,就可以看到让 cpu 100% 的进程 id,pid 就是

    2024年02月11日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包