CPU飙升在日常系统运维过程中并不少见,本文将介绍如何快速找出Java应用CPU飙升的原因。在开始之前,我们想想,想要定位Java应用的CPU飙升的原因,我们需要知道哪些信息?以下是我的答案:

  • 首先,需要知道哪个进程占用CPU比较高,
  • 其次,需要知道占用CPU高的那个进程中的哪些线程占用CPU比较高,
  • 然后,需要知道这些线程的stack trace。

找出了CPU占用高的线程号和其stack trace并再结合应用日志基本上就可以找到问题根源。接下来,将介绍相应的工具来找到这些问题的答案。

首先,通过top和pgrep来查看系统中Java进程的CPU占用情况。命令如下:

top -p `pgrep -d , java`

其中pgrep是显示系统中java应用的进程号,top -p是只显示这些进程的信息。记录下CPU占用率最高的那个进程号。

其次,通过top来查看进程中CPU占用最高的那些线程,命令为:

top -Hp 12345

这里,假定12345为占用CPU高的进程号。-H是显示该进程中线程的CPU占用情况。同样,记录下CPU占用率高的那些线程号。

然后,通过jstack导出Java应用中线程的stack trace,命令如下:

jstack 12345

这里是最关键的一步,需要把第2步中的线程号和jstack输出结果中的线程号关联起来。因为top中显示的线程号是10进制,jstack的输出结果中的线程号是16进制,所以只需要把top中看到线程号转换成16进制,然后到jstack的输出结果中即可找到对应线程的stacktrace了。

小结一下,我们通过top和jstack来找到CPU占用高的线程的stack trace,其中最关键的是上述第3步中如何将top中观测到的线程号关联到jstack的输出的stack trace。
---------------------

原文:https://blog.csdn.net/jewes/article/details/65935733

如何找到CPU飙升的原因相关推荐

  1. 线上频繁发生Full GC 如何调优?如何快速定位OOM、cpu飙升、线程死锁等问题

    文章目录 1. jvm调优命令.工具介绍 ①:jps ②:jmap 查看应用中各实例生成情况 快速定位内存突然飙升导致的OOM异常 查看堆内存使用情况 ③:Jstack 检测线程死锁 快速定位导致cp ...

  2. 运维告诉我CPU飙升300%,为什么我的程序上线就奔溃了

    线上服务CPU飙升的一次经历 前言 功能开发完成仅仅是项目周期中的第一步,一个完美的项目是在运行期体现的 今天我们就来看看笔者之前遇到的一个问题CPU飙升的问题. 代码层面从功能上看没有任何问题但是投 ...

  3. jvm优化—监控工具:诊断内存泄露、cpu飙升、线程死锁、响应变慢

    目录 一.jvm常见监控工具&指令 JVM常见参数 为什么要将永久代 (PermGen) 替换为元空间 (MetaSpace) 呢? 1. jps:jvm进程状况工具 2.jstat: jvm ...

  4. cpu飙升 死循环_记一次CPU飙升BUG

    一.前言 上线后,CPU飙升到100%,怎么办?马上重启?大错特错,马上重启只会让这个雷石沉大海,治标不不治本,等待你的下次的历史重演! 二.现象 监控告警,某机器的CPU飙升到100% 三.分析 第 ...

  5. 使用dotnet-dump 查找 .net core 3.0 占用CPU 100%的原因

    使用dotnet-dump 查找 .net core 3.0 占用CPU 100%的原因 原文:使用dotnet-dump 查找 .net core 3.0 占用CPU 100%的原因 公司的产品一直 ...

  6. 记一次CPU飙升的问题分析解决思路(转)

    一.前言 上线后,CPU飙升到100%,怎么办?马上重启?大错特错,马上重启只会让这个雷石沉大海,治标不不治本,等待你的下次的历史重演! 二.现象 监控告警,某机器的CPU飙升到100% 三.分析 第 ...

  7. 简单的cpu飙升排查方法

    1先来一段飙升代码 public class FindJavaThreadInTaskManager {public static void main(String[] args) {Thread t ...

  8. 下载丨8月数据库技术通讯:不合理业务设计导致CPU飙升

    为了及时共享行业案例,通知共性问题,达成共享和提前预防,我们整理和编辑了<云和恩墨技术通讯>,通过对过去一段时间的知识回顾,故障归纳,以期提供有价值的信息供大家参考.同时,我们也希望能够将 ...

  9. Java程序CPU飙升排查,找出死循环代码

    windows环境下cpu飙升问题 线上某台runtime机器(windows Server)cpu报警,这种情况初步就是代码里面死循环了,先把机器下线了保证不再有新的任务分配进来,然而cpu使用依然 ...

  10. 线上服务导致cpu飙升问题排查

    一.故障说明 昨晚突然收到线上服务器cpu报警,登录监控平台看了下发现cpu瞬间飙升到60%.第一反应就是使用top命令去查看,发现是一个java进程.于是立刻使用jps -l命令定位到该java进程 ...

最新文章

  1. 耐能团队论文登上《自然·电子学》:集成忆阻器与CMOS以实现更好的AI
  2. Linux pg数据库导出数据,linux下 postgres实现导出和导入
  3. react native windows 搭建(完整版)
  4. Campus Address
  5. react 使用 leaflet 百度地图_【React】react项目中应用百度地图添加起始点绘制路线...
  6. 企业实战04:Oracle数据库_管理表
  7. 【华为云技术分享】用人工智能技术推动西安民俗文化,斗鱼超管团队有一套
  8. LintCode 28. 搜索二维矩阵
  9. 一步一步写算法(之二叉树深度遍历)
  10. crontab下执行设置壁纸出错问题
  11. main run方法没用_多线程:解决Runnable接口无start()方法的问题
  12. windows远程连接linux系统(图文)
  13. 企业园区全面安防面临的问题及解决之道
  14. Affymetrix基因芯片小总结
  15. OLS和GWR模型部分参数解释
  16. 一个简单的划词翻译工具
  17. Word如何快速绘制你需要的作文稿纸
  18. Android Studio查看MD5
  19. 2007电脑报专用版SN(备忘之用)
  20. Xposed FrameWork v89 安装

热门文章

  1. 我的gitbub的学习目录
  2. Charles抓包工具的安装操作以及可能出现的问题(安装不了证书、手机不能上网)
  3. Fabric共识机制
  4. Solr中的日期/时间表示
  5. Biopython---part 1
  6. 雷达探测原理及坐标表示
  7. FACEBOOK改名META,元宇宙救不了FACEBOOK
  8. 渥太华大学计算机科学,加拿大渥太华大学计算机科学CO-OP录取
  9. Linux中执行shell脚本的方法,在Linux中执行Shell脚本的4种方法的总结
  10. 使用FTP服务器进行文件上传与下载