CPU突然飙升,系统响应变慢。让我教你开发人员的基本能力。这不,有个朋友去阿里面试,第一次面试就遇到了“CPU高、系统响应慢怎么排查”的问题?一时间,小家伙不知从何下手。今天,我将与您分享我的解决方案。CPU是整个计算机的核心计算资源。对于一个应用进程来说,CPU的最小执行单位是线程。CPU飙升的原因有两个:1、CPU上下文切换太多。对于CPU来说,每个CPU核心一次只能运行一个线程。如果有多个线程要执行,CPU只能使用上下文切换。执行不同线程的方法。上下文切换需要做两件事,保存运行线程的执行状态和让等待线程执行这两个过程。CPU需要执行内核相关的指令来实现状态保存。如果上下文切换很多,会占用大量的CPU资源,使CPU无法去执行用户进程中的指令,导致响应速度下降。在Java中,文件IO、网络IO、锁等待、线程阻塞等操作都会造成线程阻塞,触发上下文切换。2、过度消耗CPU资源是指程序中创建了大量线程,或者某些线程一直占用CPU资源无法释放,如死循环!CPU利用率过高后,应用程序中的线程无法被CPU调度,影响程序的执行效率!既然CPU占用率高是由这两个问题引起的,那么我们可以使用top命令查找CPU占用率高的进程,使用Shift+H查找进程中CPU占用率高的线程。这里有两种情况。.CPU使用率高的线程总是一样的,说明程序中存在线程长期占用CPU一直没有释放的情况。本例直接通过jstack获取threaddumplog,定位到threadlog就可以找到问题的代码。CPU利用率高的线程ID不断变化,说明创建的线程过多。需要选择几个线程ID,通过jstack查看threaddump日志。最后有可能定位的结果是程序正常,但是此时CPU飙升,用户访问量大,导致系统资源不足。以上是我对这个问题的理解!从这个问题来看,面试官主要考察的是实践能力和解题思路。如果没有实践过,但是知道CPU飙升现象的原因,并说出自己的解决方法,通过面试是没有问题的。
