前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >线上cpu使用率100%如何排查

线上cpu使用率100%如何排查

作者头像
姜同学
发布2022-10-27 17:25:25
1.8K0
发布2022-10-27 17:25:25
举报
文章被收录于专栏:姜同学姜同学

自从使用滴滴开源的夜莺监控系统之后,偶尔会收到cpu报警的邮件,姜同学分析了一下原因大多都是java进程进入了循环或是死锁而得不到释放造成的,接下来姜同学就模拟下cpu使用率超过100%以及两种方案的排查过程。

一段陷入循环的代码

是第19行哦

使用Top和(JDK自带的)jstack定位原因

toc -c 找到cpu使用率最高的进程

代码语言:javascript
复制
toc -c

获得PID 4487

top -Hp pid 找到进程中cpu占用率最高的线程

代码语言:javascript
复制
top -Hp 4487

获得cpu使用率最高的线程ID 4500

将十进制的线程id转为16进制

使用top工具查找到的线程id都是二进制滴,但是java堆栈日志里面的线程ID都是16进制滴,所以为了定位具体的堆栈信息我们将十进制的线程ID转为16进制滴。

代码语言:javascript
复制
printf "%x\n" 4500

jstack查看堆栈

代码语言:javascript
复制
jstack pid | grep "16进制的线程ID" -C5 --color

很快就定位到了咱们上面陷入循环的第19行代码。

使用开源的arthas快速定位

如果你的运气不错服务器上面有arthas,并且内存并没有因为cpu的问题而爆表,那么你将会更便捷的定位到问题的原因。 arthas的官方文档https://arthas.aliyun.com/doc/,上面有他更强大的功能以及详细的使用方式。

启动arthas

代码语言:javascript
复制
java -jar arthas-boot.jar

启动之后发现了我们服务器上面java进程 输入1即可进入对应的java进程

thread -n 3 打印出最忙的三个线程

3你可以换成 4,5,6展示的就是前4,5,6个线程你懂我的意思吧。

很快又定位到了我们陷入循环的第19行代码。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-08-14T,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一段陷入循环的代码
  • 使用Top和(JDK自带的)jstack定位原因
    • toc -c 找到cpu使用率最高的进程
      • top -Hp pid 找到进程中cpu占用率最高的线程
        • 将十进制的线程id转为16进制
          • jstack查看堆栈
          • 使用开源的arthas快速定位
            • 启动arthas
              • thread -n 3 打印出最忙的三个线程
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档