定位CPU飙升问题点

  • 前期准备
  • 问题分析
    • 一:使用linux自带命令分析问题
    • 二:使用async-profiler工具分析问题

前期准备

先准备一个程序来拉高cpu,这里我们准备了一个springboot项目,在主线程中循环打印日志,代码如下。

public class BeyondStarterApplication extends SpringBootServletInitializer {public static void main(String[] args) {SpringApplication.run(BeyondStarterApplication.class, args);//System.out.println("beyond-cpu-high-test_start_success");while (1>0) {System.out.println("无限执行打印,cpu你怕不怕");}}
}


将上述程序部署到linux服务器上后并启动,之后开始分析。

问题分析

一:使用linux自带命令分析问题

第一步:定位具体哪个进程导致cpu飙升。
使用top命令查看进程占用cpu时间比,这里我们发现pid为30832号进程占用比例非常高,达到了88.9。

第二步:定位该进程下具体哪个线程占用cpu高。
使用top -H -p 30832 #进程号命令查看
将线程pid转换为线程ID
使用命令printf "%x\n" 30850进行转换,得到线程ID

根据进程pid和线程ID获取cpu占用高的线程的具体信息,执行jstack 30832 |grep 7882 -A 20

这里我们可以看到at com.ai.toptea.sysm.BeyondStarterApplication.main(BeyondStarterApplication.java:19)是问题的根源。和我们预期一样,就是我们加入无限打印的地方。

二:使用async-profiler工具分析问题

async-profiler工具下载地址https://github.com/jvm-profiling-tools/async-profiler/releases
下载完成后进入目录执行./profiler.sh -d 30 30832 > profile-java.log命令生成cpu占用情况分析文件,30832为进程pid。
下图为日志,可以看出cpu占用最多的几个都和com.ai.toptea.sysm.BeyondStarterApplication.main类下的print方法相关。

--- Execution profile ---
Total samples       : 2986--- 1788607978 ns (5.99%), 178 samples[ 0] __write[ 1] writeBytes[ 2] Java_java_io_FileOutputStream_writeBytes[ 3] java.io.FileOutputStream.writeBytes[ 4] java.io.FileOutputStream.write[ 5] java.io.BufferedOutputStream.flushBuffer[ 6] java.io.BufferedOutputStream.flush[ 7] java.io.PrintStream.write[ 8] sun.nio.cs.StreamEncoder.writeBytes[ 9] sun.nio.cs.StreamEncoder.implFlushBuffer[10] sun.nio.cs.StreamEncoder.flushBuffer[11] java.io.OutputStreamWriter.flushBuffer[12] java.io.PrintStream.newLine[13] java.io.PrintStream.println[14] com.ai.toptea.sysm.BeyondStarterApplication.main[15] sun.reflect.NativeMethodAccessorImpl.invoke0[16] sun.reflect.NativeMethodAccessorImpl.invoke[17] sun.reflect.DelegatingMethodAccessorImpl.invoke[18] java.lang.reflect.Method.invoke[19] org.springframework.boot.devtools.restart.RestartLauncher.run--- 1703023200 ns (5.70%), 170 samples[ 0] __write[ 1] writeBytes[ 2] Java_java_io_FileOutputStream_writeBytes[ 3] java.io.FileOutputStream.writeBytes[ 4] java.io.FileOutputStream.write[ 5] java.io.BufferedOutputStream.flushBuffer[ 6] java.io.BufferedOutputStream.flush[ 7] java.io.PrintStream.write[ 8] sun.nio.cs.StreamEncoder.writeBytes[ 9] sun.nio.cs.StreamEncoder.implFlushBuffer[10] sun.nio.cs.StreamEncoder.flushBuffer[11] java.io.OutputStreamWriter.flushBuffer[12] java.io.PrintStream.write[13] java.io.PrintStream.print[14] java.io.PrintStream.println[15] com.ai.toptea.sysm.BeyondStarterApplication.main[16] sun.reflect.NativeMethodAccessorImpl.invoke0[17] sun.reflect.NativeMethodAccessorImpl.invoke[18] sun.reflect.DelegatingMethodAccessorImpl.invoke[19] java.lang.reflect.Method.invoke[20] org.springframework.boot.devtools.restart.RestartLauncher.run--- 753612460 ns (2.52%), 76 samples[ 0] sun.nio.cs.StreamEncoder.flushBuffer[ 1] java.io.OutputStreamWriter.flushBuffer[ 2] java.io.PrintStream.write[ 3] java.io.PrintStream.print[ 4] java.io.PrintStream.println[ 5] com.ai.toptea.sysm.BeyondStarterApplication.main[ 6] sun.reflect.NativeMethodAccessorImpl.invoke0[ 7] sun.reflect.NativeMethodAccessorImpl.invoke[ 8] sun.reflect.DelegatingMethodAccessorImpl.invoke[ 9] java.lang.reflect.Method.invoke[10] org.springframework.boot.devtools.restart.RestartLauncher.run--- 748843545 ns (2.51%), 75 samples[ 0] sun.nio.cs.StreamEncoder.flushBuffer[ 1] java.io.OutputStreamWriter.flushBuffer[ 2] java.io.PrintStream.newLine[ 3] java.io.PrintStream.println[ 4] com.ai.toptea.sysm.BeyondStarterApplication.main[ 5] sun.reflect.NativeMethodAccessorImpl.invoke0[ 6] sun.reflect.NativeMethodAccessorImpl.invoke[ 7] sun.reflect.DelegatingMethodAccessorImpl.invoke[ 8] java.lang.reflect.Method.invoke[ 9] org.springframework.boot.devtools.restart.RestartLauncher.run--- 746264901 ns (2.50%), 75 samples[ 0] sun.nio.cs.UTF_8$Encoder.encodeLoop[ 1] java.nio.charset.CharsetEncoder.encode[ 2] sun.nio.cs.StreamEncoder.implWrite[ 3] sun.nio.cs.StreamEncoder.write[ 4] java.io.OutputStreamWriter.write[ 5] java.io.BufferedWriter.flushBuffer[ 6] java.io.PrintStream.newLine[ 7] java.io.PrintStream.println[ 8] com.ai.toptea.sysm.BeyondStarterApplication.main[ 9] sun.reflect.NativeMethodAccessorImpl.invoke0[10] sun.reflect.NativeMethodAccessorImpl.invoke[11] sun.reflect.DelegatingMethodAccessorImpl.invoke[12] java.lang.reflect.Method.invoke[13] org.springframework.boot.devtools.restart.RestartLauncher.run

定位CPU飙升问题点相关推荐

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

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

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

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

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

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

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

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

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

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

  6. MySQL数据库CPU飙升到100%解决方案

    1.定位cpu问题所在 当cpu飙升到100%时,先用操作系统命令top命令观察是不是mysqld占用导致的,如果不是,找出占用高的进程,并进行相关处理. 2.查看慢查询日志 进入mysql命令行 m ...

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

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

  8. 云服务器被植入挖矿木马,CPU飙升200%处理方案

    云服务器被植入挖矿木马,CPU飙升200%处理方案 1,通过执行top命令,即可在返回结果中看到当时系统的CPU占用率. top -c 2.检查防火墙iptables规则中是否存在可疑端口 iptab ...

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

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

  10. 如何定位cpu占用率高的java线程

    如何定位cpu占用率高的java线程 工具: 1 jstack:jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息,如果是在64位机器上,需要指定选项&q ...

最新文章

  1. 对装饰器@wraps的解释(一看就懂)-- 并对装饰器详解
  2. 怪怪设计论闲谈篇:职责与解耦的矛盾
  3. 杜克大学医学院禁止公开场合说中文?涉事负责人被勒令下台...
  4. mysql删除记录后id不连续_Mysql数据库中使用DELETE语句时,一般删除一条记录后ID会不连续,才能让序号继续按顺序排列?...
  5. Linux 答疑:Linux 中 apt 与 apt-get 命令有何区别,我们该选择 apt 还是 apt-get?
  6. Instant Complexity--POJ 1472
  7. ctf wav文件头损坏_【CTF入门第二篇】南邮CTF web题目总结
  8. 对php的感受100字_这首由半个古风圈歌手演唱的王者荣耀100英雄群像歌,燃炸了...
  9. ros melodic控制真实机械臂之openmanipulator参考
  10. python-numpy.vectorize()
  11. Python中常见的字符串小笔试题
  12. HTML方式显示邮件无法打开,HTML格式的电子邮件不能正确显示
  13. 张小龙《微信背后的产品观》
  14. my ReadBook_zhulidianzishangwushi / dianzishangwushi
  15. VSCode使用Vim插件心得
  16. 502 bad gateway原因、解决方法
  17. 请问网页的在线聊天怎么实现
  18. Monitor(管程)是什么意思?Java中Monitor(管程)的介绍
  19. 前端----html---第一天
  20. 9.30上海交大PMP每日一题

热门文章

  1. 什么是飞天?全球级大数据计算平台,自主研发!
  2. 字节跳动终于迎来普调,薪资普遍降17%
  3. 浪潮服务器bios设置 改硬盘接口,bios设置中更改硬盘接口模式为ide的方法
  4. vue权限管理实现思路
  5. 讨论《蔚蓝(Celeste)》的设计
  6. CPU性能测试分析MIPS、DMIPS
  7. 怎样的100位区块链开发者,入选这份严苛至极的特训名单?
  8. 2.3 伯努利试验和直线上的随机游动
  9. 小米等部分手机机型不弹出对话框问题
  10. radmin注册密码