博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
linux cpu占用100%排查
阅读量:4567 次
发布时间:2019-06-08

本文共 662 字,大约阅读时间需要 2 分钟。

某服务器上部署了若干tomcat实例,即若干垂直切分的Java站点服务,以及若干Java微服务,突然收到运维的CPU异常告警。

问:如何定位是哪个服务进程导致CPU过载,哪个线程导致CPU过载,哪段代码导致CPU过载?

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

工具:top

方法:

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

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

图示:

线上服务CPU100%问题快速定位实战

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

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

工具:top

方法:

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

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

图示:

线上服务CPU100%问题快速定位实战

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

步骤三:将线程PID转化为16进制

工具:printf

方法:printf “%x” 10804

图示:

线上服务CPU100%问题快速定位实战

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

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

步骤四:查看堆栈,找到线程在干嘛

工具:pstack/jstack/grep

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

  • 打印进程堆栈

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

图示:

线上服务CPU100%问题快速定位实战

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

转载于:https://www.cnblogs.com/heluan/p/9601060.html

你可能感兴趣的文章
命名时取代基优先顺序_浅谈有机化合物的英文命名(七)
查看>>
开启弹窗_弹窗广告总跳出来?学会这3种方法手机电脑再也不怕被打扰
查看>>
matlab 功率谱密度 汉宁窗_时域和频域特征提取Matlab编程实例
查看>>
centos7 mysql命令_Centos7中mysql安装以及命令
查看>>
mysql8创建不了用户_mysql8创建用户
查看>>
mysql数据库 q_mySQL数据库 - osc_q4xkkmlj的个人空间 - OSCHINA - 中文开源技术交流社区...
查看>>
mysql yum 卸载命令_Linux下MySQL5.7.18 yum方式从卸载到安装
查看>>
mysql use procedure bodies_Debug core file with no symbols
查看>>
debian安vs_如何在Debian 10 Linux上安装和使用Docker
查看>>
jdbc mysql 5.05_JDBC 连接 MySQL 时碰到的小坑
查看>>
rancher部署mysql怎么挂在卷轴_Rancher部署mysql8
查看>>
java_home没有定义_“错误:JAVA_HOME没有正确定义.”在构建Jikes rvm
查看>>
python canvas画移动物体_tkinter – 用于画布对象python的动画移动的方法
查看>>
java 连接 rac_JAVA 连接 ORACLE RAC 字符串
查看>>
java面试题 网络编程_java面试题《三、网络编程》
查看>>
java布尔矩阵程序_Java编程学习摘要(2)语法基础
查看>>
java no wait_即使队列在activemq中不为空,JMS实现中的receiveNoWait也返回null
查看>>
java定义player类_简易扑克牌游戏 定义了Constants、Main、Player、Poker四个类
查看>>
java方法重载例题_Java方法重载实现原理及代码实例
查看>>
java 字符串 包含 次数_用JAVA写查询一个字符串中是否包含另外一个字符串以及出现的次数...
查看>>