00:00
大家好,我是小马哥,今天给大家分享一下线上CPU过高怎么办?首先我们使用idea,然后新建立一个项目,模拟一下。这里把路径改一下。这里选择JDK1.8。下一步。这里写的spring web。下一步完成。我们先建立CTRL文件夹。
01:03
要建立control类。我们在这个CTRLL上面加入CTRL注解。我们先写一个正常的这个方法。先打印一下。写一个返回值。我们在这个方法上面加上get注解。我们再写一个死循环的方法,让那个CPU标高。
02:11
我们也先打印一下。写一个死循环。我们在这个方法上面加入get注解的。啊,我们这时候发现这个卡通啊,还是灰色的,因为它没有被那个。Three扫描到我们加入,把这个路径加上。这时候我们再看一下CTRLL,它变亮了。
03:01
好,接下来我们就那个。打印呃,用那个马命令,然后打一个包出来。那时候我们已经打好了。我们把这个炸包传到服务器上。已经传好了。我们用Java钢架启动一下。这时候我们发现已经启动起来了端口。Spring boot默认的端口是8080。
04:00
我们新起一个窗口。然后去调用一下,先调用一下正常的那个方法。这光标没有显示出来,我们再打开一下。先调一下那个正常的方法。哎,我们发现打印了一个hello word没有问题,这时候我们在调用那个死循环的方法。在调用之前,我们看一下这个CPU占用的是10%左右,我们调用一下看一下。这时候我们发现这边打印了,已经打印了一个。号卡,这时候CPU到100%了。
05:00
好,这时候我们去已经模拟好了一个CPU这种100%的一个情况,我们在那个线上怎么去定位这个问题呢?哪行代码导致的,怎么去定位这个。接下来我们使用使用那个top命令,然后去定位一下当前那个占用CPU比较高的那个进程。我们发现是这个220226,然后占用了90%左右的那个。CPU。然后我们这时候使用。JDK自带的J命令,然后把当前的这个现成情况给打印出来。然后那个线程ID。那我没输出到那个。那个文本里面去。
06:01
所以说我们就。打印出来了,这时候我们要接下来我们要在这个进程中中找到那个占用那个CPU比较高的线程,这时候我们还是利用top面量top,然后刚P,然后指定那个线程ID。20226,然后杠H。啊,这个杠H如果不加的话,就会显示那个所有线程的一个总和,如加上杠H,它就会把所有线程的一个运行状态,然后就会打显示出来。这时候我们可以看到22274,然后这它占用了百分之。60的90的CPU。好。呃,就接下来我们要把这个现成ID,然后转成16进制,因为J大格它那个现成那个呃,现成的一个状态,然后它是用16进制表现的。
07:20
505702。这时候我们使用那个类似命令,然后去看一下当前的。呃,根据这个进程ID去搜索一下,看一下这个现成的状态,现成的一个情况,这时候大家用这个类似命令,不要用那个VI命令,VI命令它会一次性把。所有文件,然后都加载进来,呃,线上的时候,有时候那个日志比较大,然后会占用一定的那个,呃,机器的资源。大写的这翻到最后一行,然后我们查找啊,最新的这个情况,这时候我们可以看到。
08:05
呃,这个线程,然后它现在的状态是那个variable状态,然运行中的,然后我们可以,呃,发现这个controltr,然后这个。21行这行代码。我们看一下代码去。诶,21号,哎,这里面有一个死循环。嗯,我们就这样就会定位到代码的位置,当然生产环境中肯定不会写死一个死循环,可能有特殊的情况下出现死循环,或者一个方法执行特别慢,用这种方法就可以很快的找到这个代码的位置。接下来我给大家总结一下。线上CPU过高怎么办?
09:03
啊,第一步我们先那个。呃,使用top,先使先使用这个top命令。找到占用CPU比较高的。比较高的这个进程。呃,第二步我们使用JDK自带的J命令。呃,打印虚。虚拟机当前的线程快照。使用的是j star。
10:02
然后。进程ID。然后输出到一个文本里面去。嗯,第三步我们找到这个。找到占用CPU比较高的那个线程。呃,我们使用的是top命令。把杠P指定哪个线程ID。呃,进程ID。
11:01
然后杠H打印所有线程的一个状况。啊,接下来我们把这个线程ID。呃,转换成16进制。
12:02
好,呃,最后一步就是到那个,呃,刚才打印的那个对战信息里面。呃。悲剧,现成的ID。找到要。现成的。具体情况。这使用的是。累死了。然后使用的大写的G,然后到最后好。然后那个倒叙,然后去那个查询的16进制的2D。
13:09
嗯,在这里我给大家推荐一下啊,看一下嗯,我博客里面的这篇文章。线上的一个那个问题的排查的一个思路和一些工具的使用,包括CPU过高或者占用CPU,占用内存比较大,或者磁盘访问,还有网络情况,大家嗯,可以看一篇啊,看一下这篇文章,还有这个是我刚才介绍的G大文量,因为JDK还提供了一些其他的面料,大家可以具体看一下。好,今天我的分享就到这里,谢谢大家。
我来说两句