【原创】谈谈线上CPU100%排查套路
引言
不知道在大家面试中,有没有遇到这个问题
生产服务器上部署了几个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 线上故障排查套路,从 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小时之久才触发.在这一小时里各种排查找不出问题,直到延迟时间结束了,该任务才珊珊触发.原因主要就 ...
随机推荐
- Visual Studio高效实用的扩展工具、插件
说明: 对一个有想法的程序员来说,善于使用一款高效的开发工具是很重要的,今天给大家介绍的是宇宙第一IDE vs用起来很不错的开发工具,假如大家觉得不错也可以尝试的用用,毕竟对于我们这些一天一大半的时间 ...
- EscapeAndUnescapeUtil【java模拟js的escape和unescape函数】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 在这里做一个记录,基本代码同参考资料<java模拟js的escape和unescape函数>一样. 效果图 代码 ...
- 【activity任务栈】浅析
背景知识 Activity四种启动模式 标准模式 standard 栈顶复用模式 singleTop 栈内复用模式 singleTask 单例模式 singleInstance 任务栈 Activit ...
- docker~yml里使用现有网络
回到目录 我们在进行docker swarm部署高可用集群时,在yml文件里可能要配置一些服务,而这些服务可能要使用一些公用的数据库,这些数据库可能已经运行在某个容器里,而这些容器有自己的网络,doc ...
- seg:NLP之正向最大匹配分词
已迁移到我新博客,阅读体验更佳seg:NLP之正向最大匹配分词 完整代码实现放在我的github上:click me 一.任务要求 实现一个基于词典与规则的汉语自动分词系统. 二.技术路线 采用正向最 ...
- MySQL via EF6 的试用报告
1.如何通过 EF6 来连接 MySQL? 2.如何通过 EF6 来实现 CRUD? 2.1.Create 添加 2.2.Retrieve 查询 2.3.Update 修改 2.4.Delete 删除 ...
- Asp.NetCore依赖注入和管道方式的异常处理及日志记录
前言 在业务系统,异常处理是所有开发人员必须面对的问题,在一定程度上,异常处理的能力反映出开发者对业务的驾驭水平:本章将着重介绍如何在 WebApi 程序中对异常进行捕获,然后利用 Nlog ...
- 【我们一起写框架】MVVM的WPF框架(二)—绑定
MVVM的特点之一是实现数据同步,即,前台页面修改了数据,后台的数据会同步更新. 上一篇我们已经一起编写了框架的基础结构,并且实现了ViewModel反向控制Xaml窗体. 那么现在就要开始实现数据同 ...
- C# 默认访问权限
声明类.方法.字段.属性时不加访问权限修饰符时的访问权限是什么呢?1. 声明命名空间.类,前面不加限制访问修饰符时,默认访问权限为internal——访问仅限于当前程序集. 2. 声明类成员(域.属性 ...
- Ajax全局处理错误
背景:项目前端ajax请求很多都没有写error方法,所以用户体验很不好 新来的前端负责人发现这个问题,写了一个错误处理方法,如下 //统一处理Ajax错误方法 function onAjaxErro ...