java程序线上运行时,出现cpu过高的情况如何进行定位呢?

记得刚参加工作的时候,老同事留下的一个项目,出现了cpu100%的情况,后来检查代码发现,之前的同事在写这块的时候,没有考录到多线程并发的问题,有个定时器偶发的多线程情况下同时写入同一个hashmap,导致cpu爆表

我们写一个小demo进行演示

首先准备一段java示例代码:

public class Test{public static void main(String args[]){Thread thread = new Thread(new Runnable() {@Overridepublic void run() {int i = 0;while (true){System.out.println(i++);try {Thread.sleep(10);} catch (InterruptedException e) {e.printStackTrace();}}}});thread.setName("mytest");thread.start();
}

新启了一个线程,每10毫秒输出自增的数,在1c1g的机器上已经能体现出来消耗了

准备好Test.java文件,

使用javac Test.java命令编译java代码;

使用nohup java Test &启动java进程;

使用tail -f nohup.out已经能看到程序的输出了

我们可以去定位这个耗费资源比较大的线程了;

首先使用top -H命令

持续观察可以看到3624这个线程一直处在占用cpu的状态,这里时间间隔10ms负载并不大,所以占用的不多,不过已经可以展示了

使用jps命令查看当前系统中运行的java进程

使用printf %x 3624 获取3624这个线程的16进制数,因为java的线程id都是使用十六进制数表示的

获得了e28这个id

下来使用jstack 3614打印jvm的堆栈信息

由于程序比较简单,打印出来的内容就这么多,我们在堆栈信息中找到e28这个线程对应的信息,

可以看到,这个线程整处于sleep状态,

这样我们就能找对问题的地方,去排查问题了

top结合jstack处理线上cpu飙升问题相关推荐

  1. 如何快速处理线上故障【转】

    概述 线上故障通常是指大规模的影响线上服务可用性的问题或者事件,通俗点讲就是:掉'坑'里了,这个'坑'就是线上故障!线上故障的处理过程可以形象地表达为:'踩坑'.'跳坑'.'填坑'.'避坑'. 线上故 ...

  2. 如何快速处理线上故障

    #概述 线上故障通常是指大规模的影响线上服务可用性的问题或者事件,通俗点讲就是:掉'坑'里了,这个'坑'就是线上故障!线上故障的处理过程可以形象地表达为:'踩坑'.'跳坑'.'填坑'.'避坑'. 线上 ...

  3. 记一次线上cpu飙升100%的排查过程

    大家好,我是烤鸭: 最近没怎么写技术文章,还是得回归下初心,正好前几天出现个线上问题,记录下排查过程. 问题描述 某个时间点,接收到接口响应慢报警. 过一会收到服务器cpu可用率低(<10%)报 ...

  4. 线上cpu飙升解决方案

    1.top 定位哪个进程占用cpu最高 #查看当前占用资源最多的进程 $ topPID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND40 root ...

  5. Java线上CPU内存冲高问题排查步骤

    1 引言 作为一名从事Java开发快一年的程序员,在线上经常碰到某个模块的Pod发出CPU与内存告警的问题,而这些问题会导致系统响应缓慢甚至是服务不可用.一般情况下可以通过重启或者调高Pod的资源量或 ...

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

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

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

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

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

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

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

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

最新文章

  1. linux系统负载检查方法
  2. 多花5美元提速500%,树莓派新品Zero 2 W发布
  3. android udp 收发例子_网络协议之TCP和UDP
  4. C++图解前缀树(字典树)
  5. 纪中A组模拟赛总结(2021.7.13)
  6. HATEOAS的RESTful服务。 超媒体:REST的秘密要素
  7. 由 go orm 引发的探索
  8. java 错误无法启动_1069 错误(由于登录失败而无法启动服务)解决方法
  9. WPF版的权限管理系统
  10. 计算机辅助设计cad实训总结,CAD画图的心得体会
  11. 深度学习mindspore --- rescale(rescale, shift)
  12. windows 弹shell_10个简洁实用的Windows装机必备软件
  13. Pug 介绍和在 Vue 中使用
  14. mc java送win10_微软针对Windows 10的免费Minecraft赠品在Java播放器的午夜结束
  15. 云服务器如何重新装系统,云服务器可以重新安装系统
  16. 大象 ThinkingUML
  17. 百度地图离线API2.0(含示例,可完全断网访问)
  18. python枚举窗口句柄_如何使用 WIN32 API 枚举窗口?
  19. 防止你的WP7手机偷跑流量——系统设置篇
  20. GeekPwn 2022开启全球招募,召集顶尖极客参赛挑战

热门文章

  1. 初次安装Linux(Ubuntu)(ssh,ftp服务安装)
  2. VMware中linux虚拟机无法全屏显示的解决方法(1080P分辨率调节)
  3. git冲突解决方案 Intellij IDEA
  4. Android Studio “Project Structure”选项目录结构显示异常
  5. 为什么我突然在Firefox中出现“阻止加载混合的活动内容”的问题?
  6. 如果你正在使用CocoaPods,你的.gitignore会有什么?
  7. aws beanstalk mysql_AWS Beanstalk搭建WordPress站点
  8. 麦克纳姆轮辊子滚动速度分析
  9. 问答| 为何会采用倒车入库(侧方位停车)方式?
  10. e站app里站hosts_硬核干货区 | E站的国际站运营知识星球上线啦