谈谈线上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小时之久才触发.在这一小时里各种排查找不出问题,直到延迟时间结束了,该任务才珊珊触发.原因主要就 ...
随机推荐
- day72 关于rbac组件的小部分面试题
rbac的权限组件 基于角色的权限控制 1.什么是权限? url代表的就是一个权限 2.如何实现权限的控制? 表结构 以我们讲的课的内容为例 菜单表: - title 标题 - icon 图标 ...
- 阶段01Java基础day16集合框架02
16.01_集合框架(去除ArrayList中重复字符串元素方式1) A:案例演示 需求:ArrayList去除集合中字符串的重复值(字符串的内容相同) 思路:创建新集合方式 /** * A:案例演示 ...
- Java基础-访问修饰符
访问修饰符 default (即缺省,什么也不写): 在同一包内可见,不使用任何修饰符.使用对象:类.接口.变量.方法. private : 在同一类内可见.使用对象:变量.方法. 注意:不能修饰类( ...
- Alpha 冲刺11——总结
拖鞋旅游队团队事后诸葛亮会议 前言 队名:拖鞋旅游队 组长博客:https://www.cnblogs.com/Sulumer/p/10054510.html 时间:2018-12-1 20:00 地 ...
- 入门项目 A2 setting
import os # 因为setting是设置模块,存放的是一些和系统关联的一些信息,比如对C,D盘符的路径调用 BASE_PATH = os.path.dirname(os.path.dirnam ...
- Python 判断是否可以转化为浮点数及其他数字类型
Python中出现ValueError: could not convert string to float:应该怎么处理 import sys import math # 判断是否为浮点数 def ...
- 神州数码多区域OSPF配置
实验要求:掌握多区域OSPF配置 拓扑如下 R1 enable 进入特权模式 config 进入全局模式 hostname R1 修改名称 interface s0/1 进入端口 ip address ...
- Spell checker using hash table
Problem description Given a text file, show the spell errors from it. (https://www.andrew.cmu.edu/c ...
- java基础(1)IntelliJ IDEA入门和数组操作 解决idea启动速度慢--配置JVM
一. IntelliJ IDEA入门 1 快捷键和技巧 智能补全代码,比如只写首字母按回车: psvm+Enter :public stactic void main(String[] args) s ...
- git diff 与git format-patch 生成补丁包
git diff commit_id 会生成最后一次提交到目前修改过的内容补丁 git diff commit_id1 commit_id2 会生成两次提交之间修改过的内容补丁 git format- ...