谈谈线上CPU100%排查套路
知识点总结
-------------------------------------------------------------------------------------------------------------------
步骤一:找到最耗cpu的进程
工具:top
方法:
执行top -c,显示进程运行信息列表
键入P(大写),进程按cpu使用率排序
步骤二: 找到最耗CPU的线程
工具:top
方法:
top -Hp 20136,显示一个进程的线程信息列表
键入P,线程按CPU使用率排序
由此找到最耗CPU的线程PID
步骤三:将线程PID转化为16进制:
工具:printf
方法:printf "%x\n" 10804
如图,转化为16进制0x2a58
之所以要转换为16进制,是因为堆栈里,线程id是用16进制表示的。
步骤四:查看堆栈,找到线程在干嘛:
工具:pstack/jstack/grep
方法:jstack 20136 | grep '0x2a34' -C5 -color
打印进程堆栈
通过线程id,过滤得到线程堆栈
-------------------------------------------------------------------------------------------------------------------
引言
不知道在大家面试中,有没有遇到这个问题
生产服务器上部署了几个java程序,突然出现了CPU100%的异常告警,你如何定位出问题呢?
这个问题分为两版回答!
高调版
对不起,我是做研发的,这个问题在生产上是不可能遇见的!因为研发是不可能直接操作生产服务器,如果贵公司研发能遇到这个问题,应该要反思一下自己的权限控制是否合理!
面试官心里活动:装13是不是,赶紧走!
低调版
这个问题我在生产上没碰到过,因为我们是没法直接操作生产环境的。只能说,在测试环境曾经遇见过。操作步骤如下,balabala...
面试官心里活动:权限控制的不错,应该是在大厂呆过。
下面开始我们的正文
正文
下面给出两种系统环节下的排查步骤,都是一模一样的,只是命令稍有区别!
- 查消耗cpu最高的进程Pid
- 根据Pid查出消耗cpu最高的线程号
- 根据线程号查出对应的java线程,进行处理。
准备一行死循环代码
public class TestFor {
public static void main(String[] args) {
int random = 0;
while (random < 100) {
random = random * 10;
}
}
}
怎么跑,应该不用我说了,直接教大家怎么查!
Windows版
可能有人有疑问,我为什么要说Windows版的!因为,我曾经给很多政府部门做过系统。我发现他们用的是Windows Server,不是Linux系统。所有必要说一下!
查消耗Cpu最高的进程PID
手边没有Windows Server机器,我以Win 10为例,截图给大家看一下,先调出PID显示项!
然后发现进程PID如下图所示,为10856
接下来呢
根据PID查出消耗Cpu最高的线程号
这里用到微软的工具Process Explorer v16.22,地址如下https://docs.microsoft.com/zh-cn/sysinternals/downloads/process-explorer
如图所示
发现最耗Cpu的线程的TID为6616
这是十进制的数据,转成十六进制为0x19d8
根据线程号查出对应的java线程,进行处理
执行命令
jstack -l 10856 > c:/10856.stack
打开文件c:/10856.stack,搜索19d8,如下图所示
根据文件就可以看出,我们的TestFor.java文件第七行一直在跑,至此定位到问题
Linux版
Linux版本,步骤是一模一样的,就是命令换了一下
查消耗Cpu最高的进程PID
执行命令
- 执行
top -c,显示进程运行信息列表。按下P,进程按照Cpu使用率排序
如下图所示,PID为3033的进程耗费Cpu最高
根据Pid查出消耗Cpu最高的线程号
执行命令
top -Hp 3033,显示一个进程的线程运行信息列表。按下P,进程按照Cpu使用率排序
如下图所示,PID为3034的线程耗费Cpu最高
这是十进制的数据,转成十六进制为0Xbda
根据线程号查出对应的java线程,进行处理
jstack -l 3033 > ./3033.stack
然后执行,grep命令,看线程0xbda做了什么
cat 3033.stack |grep 'bda' -C 8
输出如下
至此定位到问题
总结
大家记得一定要去实际操作一次!
谈谈线上CPU100%排查套路的更多相关文章
- 【原创】谈谈线上CPU100%排查套路
引言 不知道在大家面试中,有没有遇到这个问题 生产服务器上部署了几个java程序,突然出现了CPU100%的异常告警,你如何定位出问题呢? 这个问题分为两版回答! 高调版 对不起,我是做研发的,这个问 ...
- JAVA 线上故障排查套路,从 CPU、磁盘、内存、网络到GC 一条龙!
线上故障主要会包括cpu.磁盘.内存以及网络问题,而大多数故障可能会包含不止一个层面的问题,所以进行排查时候尽量四个方面依次排查一遍. 同时例如jstack.jmap等工具也是不囿于一个方面的问题的, ...
- 线上CPU100%排查
生产服务器上部署了几个java程序,突然出现了CPU100%的异常告警,你如何定位出问题? 这个问题分为两版回答!高调版对不起,我是做研发的,这个问题在生产上是不可能遇见的!因为研发是不可能直接操作生 ...
- 告诉你如何回答"线上CPU100%排查"面试问题
不知道在大家面试中,有没有遇到这个问题: 生产服务器上部署了几个java程序,突然出现了CPU100%的异常告警,你如何定位出问题呢? 这个问题分为两版回答!高调版对不起,我是做研发的,这个问题在生产 ...
- 性能分析 | 线上CPU100%排查
不知道在大家面试中,有没有遇到这个问题: 生产服务器上部署了几个java程序,突然出现了CPU100%的异常告警,你如何定位出问题呢? 这个问题分为两版回答! 高调版 对不起,我是做研发的,这个问题在 ...
- 线上 CPU100% 排查方案
问题:生产服务器上部署了几个java程序,突然出现了CPU100%的异常告警,你如何定位出问题呢? 下面给出两种系统下的排查步骤,都是一模一样的,只是命令稍有区别! 查消耗cpu最高的进程PID 根据 ...
- 如何回答“线上CPU100%排查”面试问题
案例: public class App { public static void main( String[] args ) { int a = 0; while (a < 100) { a ...
- BTrace:线上问题排查工具
BTrace简介 GitHub地址:BTrace 下载地址:v1.3.11.3 官方使用教程:Btrace使用教程 使用场景 BTrace 是一个事后工具,所谓事后工具就是在服务已经上线了,但是发现存 ...
- 记一次线上bug排查-quartz线程调度相关
记一次线上bug排查,与各位共同探讨. 概述:使用quartz做的定时任务,正式生产环境有个任务延迟了1小时之久才触发.在这一小时里各种排查找不出问题,直到延迟时间结束了,该任务才珊珊触发.原因主要就 ...
随机推荐
- Charles设置HTTPS抓包
1. 配置 Charles 根证书 点击 Help -> SSL Proxying -> Install Charles Root Certificate 之后会弹出钥匙串,如果不弹出,请 ...
- php源代码安装
1.在官网下载php安装源文件.版本选择5的最新稳定版. [root@trial download]# wget http://cn.php.net/distributions/php-5.5.38. ...
- vue学习笔记 - 篇2
1.借助Vue.extend()方法创建组件 注意点 var Aaa = Vue.extend({ template: "<h1>这是标题</h1>" }) ...
- nginx——Nginx 防爬虫优化
if ($http_user_agent ~* "qihoobot|Baiduspider|Googlebot|Googlebot-Mobile|Googlebot-Image|Mediap ...
- jsonp 实现原理
Jsonp原理: 首先在客户端注册一个callback, 然后把callback的名字传给服务器. 此时,服务器先生成 json 数据.然后以 javascript 语法的方式,生成一个funct ...
- Hbuilder护眼主题分享
sublime还有webstorm有很多主题,但是Hbuilder就相对较少,或者直接说基本没什么主题,在网上搜索了很久也很少有Hbuilder的主题分享,于是就自己取色调了一个仿的护眼主题来分享一下 ...
- 类Shiro权限校验框架的设计和实现(2)--对复杂权限表达式的支持
前言: 我看了下shiro好像默认不支持复杂表达式的权限校验, 它需要开发者自己去做些功能扩展的工作. 针对这个问题, 同时也会为了弥补上一篇文章提到的支持复杂表示需求, 特地尝试写一下解决方法. 本 ...
- 百战程序员9- IO流
1.IO是什么意思? data source是什么意思? IO:输入输出 data source:数据源 2.字节流和字符流有什么区别?输入流和输出流有什么区别? 分类 3.节点流和处理流有什么区别? ...
- 程序猿大牛 Jeff Atwood 的两本中文书
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/happydeer/article/details/17094271 watermark/2/text ...
- 记录一次mysql查询速度慢造成CPU使用率很高情况
1.某日zabbix告警,某台机器CPU使用率过高. 查看慢查询日志,看到很多sql语句都超过10秒 把sql语句拿出来放在查询窗口执行.前面加上explain就可以查看详细查询信息 playcode ...