上篇《Java服务,内存OOM问题如何快速定位?》发布后,有朋友在评论留言,问CPU100%的性能问题,如何找到相关服务,如何定位问题代码,也非常考验技术人的功底,今天简单说下思路。

假设,服务器上部署了若干Java站点服务,以及若干Java微服务,突然收到运维的CPU异常告警。如何定位是哪个服务进程导致CPU过载,哪个线程导致CPU过载,哪段代码导致CPU过载?

简要步骤如下:

(1)找到最耗CPU的进程;

(2)找到最耗CPU的线程;

(3)查看堆栈,定位线程在干嘛,定位对应代码;

步骤一、找到最耗CPU的进程

工具:top

方法

  • 执行top -c ,显示进程运行信息列表

  • 键入P (大写p),进程按照CPU使用率排序

图示:

如上图,最耗CPU的进程PID为10765。

步骤二:找到最耗CPU的线程

工具:top

方法

  • top -Hp 10765 ,显示一个进程的线程运行信息列表

  • 键入P (大写p),线程按照CPU使用率排序

图示:

如上图,进程10765内,最耗CPU的线程PID为10804。

步骤三:查看堆栈,定位线程在干嘛,定位对应代码
首先,将线程PID转化为16进制。

工具:printf

方法:printf "%x\n" 10804

图示:

如上图,10804对应的16进制是0x2a34,当然,这一步可以用计算器。

之所以要转化为16进制,是因为堆栈里,线程id是用16进制表示的。

接着,查看堆栈,找到线程在干嘛。

工具:jstack

方法:jstack 10765 | grep '0x2a34' -C5 --color

  • 打印进程堆栈

  • 通过线程id,过滤得到线程堆栈

图示:

如上图,找到了耗CPU高的线程对应的线程名称“AsyncLogger-1”,以及看到了该线程正在执行代码的堆栈。

最后,根据堆栈里的信息,找到对应的代码,搞定!

希望对经常进行线上CPU问题排查的同学有帮助,如果有更好的实践,也欢迎分享。

相关文章:
《Java服务,内存OOM问题如何快速定位?》

调研:你遇到过奇葩的CPU100%问题么?

Java服务,CPU100%问题如何快速定位?相关推荐

  1. java from space to space_快速定位Java 内存OOM的问题

    Java服务出现了OOM(Out Of Memory)问题,总结了一些相对通用的方案,希望能帮助到Java技术栈的同学. 某Java服务(假设PID=10765)出现了OOM,最常见的原因为: 有可能 ...

  2. java 100% cpu_Java服务,CPU100%问题如何快速定位?

    假设,服务器上部署了若干Java站点服务,以及若干Java微服务,突然收到运维的CPU异常告警.如何定位是哪个服务进程导致CPU过载,哪个线程导致CPU过载,哪段代码导致CPU过载? 简要步骤如下: ...

  3. CPU100%,怎么快速定位?

    一台机器,CPU100%,如何找到相关服务,如何定位问题代码,今天简单分享下思路. 假设,服务器上部署了若干Java站点服务,以及若干Java微服务,突然收到运维的CPU异常告警.如何定位是哪个服务进 ...

  4. java 100% cpu_Java服务,CPU 100%问题如何快速定位?

    Java服务,有时候会遇到CPU 100%的问题,对于这样的问题,我们如何快速定位并解决呢?一般会有如下三个步骤: 1.找到最耗CPU的进程 2.找到这个进程中最耗CPU的线程 3.查看堆栈信息,定位 ...

  5. Java服务,内存OOM问题如何快速定位?

    Java服务,内存OOM问题如何快速定位? 原创作者: 58沈剑  来自公众号:架构师之路 最近有朋友在知识星球提问: 沈老师,有一个Java服务出现了OOM(Out Of Memory)问题,定位了 ...

  6. 用“逐步排除”的方法定位Java服务线上“系统性”故障

    说明:原文地址已经不可访问,其他地方有转载,不过很多丢失图片,所以,找到一处有图的重新配好图. 用"逐步排除"的方法定位Java服务线上"系统性"故障 Post ...

  7. Java服务CPU高如何定位解决

    原生系统命令排查的方法 分别分享下Linux和Windows系统下的排查方法 首先是Linux系统下 如果不借助工具,使用Linux和jdk自带命令的话,步骤是这样的: top命令查出占用最高的进程: ...

  8. Java 服务接入 OpenTracing(2) -- Java 项目快速接入 OpenTracing

    接入前准备 搭建 Collector 和 Querier 准备被织入 java 项目(如果已经有自己的项目jar包,可以直接跳过此步) 准备 java-specialagent 包 Java 项目织入 ...

  9. 通过长期测试定位java服务内存泄漏问题

    目录 一.前言 二.实验说明 三.实验记录 3.1 保存接口-exe部署-pid-1484 3.2 查询接口-exe部署pid-18592 3.3 查询接口-jar部署pid-20048 3.4 服务 ...

最新文章

  1. Redhat5.4 LAMP配置
  2. 计算机的桌面教案,《认识计算机桌面》教案-20210608141312.pdf-原创力文档
  3. Qt学习(二):菜单栏、工具栏和对话框
  4. SmartSVN:File has inconsistent newlines
  5. Android 自定义Dialog 去除阴影
  6. ACM 学习笔记(一) 常用STL讲解
  7. Blender插件初始化范例
  8. HTML5定位功能,实现在百度地图上定位
  9. js 中添加php数组,浅谈javascript中数组Array的添加/删除操作
  10. 2021年浙大考研计算机专业录取分数线,2021年浙江大学研究生录取分数线是多少...
  11. 十大著名黑客——George Hotz
  12. 【C语言编程练习】20050. 计算存款利息
  13. 中国象棋棋盘c语言编程,中国象棋 C语言编程.ppt
  14. NOI2018网络同步赛游记
  15. 感谢开源,让我的青春永不褪色!
  16. 【爬虫实践】获取某城市天气数据
  17. 当初我要是这么学习二叉树就好了「附图文解析」
  18. 分贝,功率,功率谱,功率谱密度,信噪比
  19. Java项目:SSM药品进货销售管理系统
  20. iTunes无法正常启动的处理

热门文章

  1. 数值计算笔记-部分主元消去cholesky分解
  2. Vert.x(vertx) Web开发-路由
  3. MySQL 手动配置环境变量(详细)
  4. linux中vim保存快捷键设置,Linux中vim操作快捷键非常简洁
  5. 最近使用的一款session工具:sa-Token
  6. 强化学习初探 DQN+PyTorch+gym倒立摆登山车
  7. 两种 HTTP 请求方法
  8. SSH的在线音乐下载网站-JAVA【数据库设计、源码、开题报告】
  9. 别看了!我们该认认真真写博客了…
  10. 资本寒冬,看咕咚、Keep、Feel们如何逆势而上