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

关注公众号“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排查,让我胆战心惊,不过这次也给我增加了不少经验,毕竟重拾了 九阴正经,让我内功又增强了;
后期会发布更多在实战方面的工作经验,与大家分享,希望大家能够喜欢,现在我需要你们的一键三连,哈哈,下期见。

猜你喜欢

转载自blog.csdn.net/weixin_34311210/article/details/113233599
今日推荐