加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

线上服务器CPU100%排查

发布时间:2020-12-15 07:19:40 所属栏目:Java 来源:网络整理
导读:某服务器上部署了若干 tomcat 实例,即若干垂直切分的 Java 站点服务,以及若干 Java 微服务,突然收到运维的 CPU 异常告警。 问:如何定位是 哪个服务进程 导致 CPU 过载, 哪个线程 导致 CPU 过载, 哪段代码 导致 CPU 过载? ? 步骤一、找到最耗 CPU 的进

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

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

?

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

工具top

方法

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

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


?

步骤二:找到该进程内最耗CPU的线程PID

工具top

方法

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

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

?

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

工具printf

方法printf “%xn” 10804

这一步可以用计算器之所以要转化为16进制,是因为堆栈里,线程id是用16进制表示的。

?

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

工具pstack/jstack/grep

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

·?打印进程堆栈

·?通过线程id,过滤得到线程堆栈


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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读