前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >趣味编程故事|java进程占用cpu过高怎么办,别急我来帮你

趣味编程故事|java进程占用cpu过高怎么办,别急我来帮你

原创
作者头像
AI码师
修改2021-02-01 10:19:35
5780
修改2021-02-01 10:19:35
举报

关注公众号“AI码师”领取2021最新面试资料一份

【主演】

运维小哥:小李

测试小姐姐:小红

开发人员:本色出演

【剧情】

在一个阳光明媚的清晨,原本还在睡梦中的我,被小李(运维小哥)的电话给惊醒了。 小李:线上告警出来一个问题,赶快看一下! 我:啥问题啊? 小李:xx服务器 现在cpu已经100%了,我刚才查了下是java进程占用的 我:好的,我来看下

我赶紧打开我的电脑,连接上了xx服务器,使用top 命令查了下,确实是java进程占用cpu最高,我大脑飞速旋转想到:这几天也没有对程序做什么大改动啊,怎么会出现这个问题呢;

于是我把本地代码切换到master分支,在本地跑了下发布到线上的代码,观察了一会,也没看见cpu 占用很高啊,我就很纳闷了,然后又上服务器看了下,java 进程占用cpu 还是比较高的,这是怎么回事呢?难道要拿出我的杀手锏?

接下来场面就比较血腥了,前方高能预警,系好安全带

【高能预警】

我拿出了杀手锏,江湖上失传已久的九阴真经(其实就是平时的笔记哈哈),在上面找了一些命令,然后就是接下来的场景了:

【步骤一】找到最耗cpu的进程

top

在这里插入图片描述
在这里插入图片描述

得到最占用CPU的进程为:39890

【步骤二】找到39890进程中最消耗cpu的线程

top -d 1 -Hp 39890

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

得到最耗CPU的进程为39900

【步骤二】将PID转换为十六进制

我们拿到了进程PID为:39900 我们需要将它转为十六进制,才能进行后续指令操作 printf "%x\n" 39900 得到结果:9bdc

在这里插入图片描述
在这里插入图片描述

【步骤三】打印当前线程的栈信息,看看它到底在干嘛

jstack 39890 | grep '9bdc' -C5

在这里插入图片描述
在这里插入图片描述

现在已经找到了线程的栈信息,我看到了我自己写的代码,我用红框标记出来了

【步骤四】带着疑问去找代码

我们根据栈信息,直接在我们项目上定位到了那段代码

在这里插入图片描述
在这里插入图片描述

我发现,这里有一个死循环,我擦,忘记加休眠时间了,导致一直在死循环跑呢,终于找到问题根源了,加上了休眠时间,然后本地测试了下没问题;

关键这是线上的问题,得要赶紧上线啊,但是也得测试呢,我不得不拨通了小红(测试小姐姐)的电话,嘀。嘀。嘀。,我心里也在滴滴滴,这么早打电话给她让她测试,免不了被训,我已经做好了心里准备了,咦,通了:

小红:干啥?(测试小姐姐总是这么彪悍)

我:有有有一个小小的线上问题(说话已经开始紧张了,生怕她开骂,哈哈),我已经改好了,需要你测试下,然后抓紧上线。

小红:今天不是周末么,还要测试,让不让人睡觉了啊?

我:我我。。。,小姐姐,你长得这么可爱,美丽,端庄,温柔,贤惠,就帮忙测试下么,不然我这个月绩效又要被扣了...

小红:看你这么诚实,这次就勉强帮你测试下吧,但是下次不要在周末给我发提测了。

我:好的呢,下...(对方已经挂断了电话...)

哈哈,不管咋样,现在已经没我的事了,我合上电脑,又进入了梦乡...

全剧终

经历了一次线上bug排查,让我胆战心惊,不过这次也给我增加了不少经验,毕竟重拾了 九阴正经,让我内功又增强了; 后期会发布更多在实战方面的工作经验,与大家分享,希望大家能够喜欢,现在我需要你们的一键三连,哈哈,下期见。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 【主演】
  • 【剧情】
  • 【高能预警】
  • 全剧终
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档