Java服务,CPU100%问题如何快速定位?
上篇《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%问题如何快速定位?相关推荐
- java from space to space_快速定位Java 内存OOM的问题
Java服务出现了OOM(Out Of Memory)问题,总结了一些相对通用的方案,希望能帮助到Java技术栈的同学. 某Java服务(假设PID=10765)出现了OOM,最常见的原因为: 有可能 ...
- java 100% cpu_Java服务,CPU100%问题如何快速定位?
假设,服务器上部署了若干Java站点服务,以及若干Java微服务,突然收到运维的CPU异常告警.如何定位是哪个服务进程导致CPU过载,哪个线程导致CPU过载,哪段代码导致CPU过载? 简要步骤如下: ...
- CPU100%,怎么快速定位?
一台机器,CPU100%,如何找到相关服务,如何定位问题代码,今天简单分享下思路. 假设,服务器上部署了若干Java站点服务,以及若干Java微服务,突然收到运维的CPU异常告警.如何定位是哪个服务进 ...
- java 100% cpu_Java服务,CPU 100%问题如何快速定位?
Java服务,有时候会遇到CPU 100%的问题,对于这样的问题,我们如何快速定位并解决呢?一般会有如下三个步骤: 1.找到最耗CPU的进程 2.找到这个进程中最耗CPU的线程 3.查看堆栈信息,定位 ...
- Java服务,内存OOM问题如何快速定位?
Java服务,内存OOM问题如何快速定位? 原创作者: 58沈剑 来自公众号:架构师之路 最近有朋友在知识星球提问: 沈老师,有一个Java服务出现了OOM(Out Of Memory)问题,定位了 ...
- 用“逐步排除”的方法定位Java服务线上“系统性”故障
说明:原文地址已经不可访问,其他地方有转载,不过很多丢失图片,所以,找到一处有图的重新配好图. 用"逐步排除"的方法定位Java服务线上"系统性"故障 Post ...
- Java服务CPU高如何定位解决
原生系统命令排查的方法 分别分享下Linux和Windows系统下的排查方法 首先是Linux系统下 如果不借助工具,使用Linux和jdk自带命令的话,步骤是这样的: top命令查出占用最高的进程: ...
- Java 服务接入 OpenTracing(2) -- Java 项目快速接入 OpenTracing
接入前准备 搭建 Collector 和 Querier 准备被织入 java 项目(如果已经有自己的项目jar包,可以直接跳过此步) 准备 java-specialagent 包 Java 项目织入 ...
- 通过长期测试定位java服务内存泄漏问题
目录 一.前言 二.实验说明 三.实验记录 3.1 保存接口-exe部署-pid-1484 3.2 查询接口-exe部署pid-18592 3.3 查询接口-jar部署pid-20048 3.4 服务 ...
最新文章
- Redhat5.4 LAMP配置
- 计算机的桌面教案,《认识计算机桌面》教案-20210608141312.pdf-原创力文档
- Qt学习(二):菜单栏、工具栏和对话框
- SmartSVN:File has inconsistent newlines
- Android 自定义Dialog 去除阴影
- ACM 学习笔记(一) 常用STL讲解
- Blender插件初始化范例
- HTML5定位功能,实现在百度地图上定位
- js 中添加php数组,浅谈javascript中数组Array的添加/删除操作
- 2021年浙大考研计算机专业录取分数线,2021年浙江大学研究生录取分数线是多少...
- 十大著名黑客——George Hotz
- 【C语言编程练习】20050. 计算存款利息
- 中国象棋棋盘c语言编程,中国象棋 C语言编程.ppt
- NOI2018网络同步赛游记
- 感谢开源,让我的青春永不褪色!
- 【爬虫实践】获取某城市天气数据
- 当初我要是这么学习二叉树就好了「附图文解析」
- 分贝,功率,功率谱,功率谱密度,信噪比
- Java项目:SSM药品进货销售管理系统
- iTunes无法正常启动的处理