一线大厂面试真题--CPU飙高系统反应慢怎么排查

发布时间:2024-01-14 13:52:51

问题解答

回答四个方面:

  1. CPU是整个计算机的核心计算资源,CPU的最小执行单元是一个应用程序的线程。
  2. CPU飙升的原因有几个:a. CPU上下文切换过多。对于CPU,每个CPU核心只能在同一时间运行一个线程。如果需要执行多个线程,CPU只能通过上下文切换执行不同的线程。上下文切换需要做两件事:i. 保存运行线程执行状态iii. 让等待线程执行这两个过程需要CPU执行核心相关指令来实现状态保存,如果更多的上下文切换将占用大量的CPU资源,使CPU无法执行用户过程中的指令,导致响应速度下降。在Java中,文件IO、网络IO、锁等待、线程阻塞等操作会导致线程阻塞,从而触发上下文切换。b. 过度消耗CPU资源,即在程序中创建大量的线程,或者有线程一直占用CPU资源,无法释放,如死循环。CPU利用率过高后,CPU无法调度应用中的线程,从而影响程序的执行效率!
  3. 由于这两个问题导致CPU利用率高,我们可以通过顶级命令找到CPU利用率高的过程,CPU在Shift+H找到过程中消耗的线程过高。这里有两种情况:a. CPU 利用率过高的线程一直是一样的,说明程序中存在线程长期占用CPU未释放的情况,在这种情况下,直接通过jstack获取线程的Dump日志,定位到线程日志后可以找到问题代码。b. CPU利用率过高的线程id不断变化,说明线程创建过多,需要选择几个线程id,通过jstack到线程dump日志进行调查。
  4. 最后,定位的结果可能是程序正常,但在CPU飙升的那一刻,用户访问量大,导致系统资源不足。
结尾

从这个问题来看,面试官主要考察实践能力和解决问题的想法。如果你没有练习过,但你知道CPU飙升的原因,并说出你的解决方案,通过面试是没有问题的。

上一篇 详解Spring事件监听
下一篇 详解Java之Spring框架中事务管理的艺术

文章素材均来源于网络,如有侵权,请联系管理员删除。

标签: Java教程Java基础Java编程技巧面试题Java面试题