CPU 飙高系统反应慢怎么排查

发布时间:2023年12月31日

CPU 飙高系统反应慢怎么排查

这个问题,我们从四个方面来考虑解答:

??CPU 是整个电脑的核心计算资源,对于一个应用进程来说,CPU 的最小执行单元是线程。

导致 CPU 飙高的原因有几个方面:

一、CPU 上下文切换过多,对于 CPU 来说,同一时刻下每个 CPU 核心只能运行一个线程,如果有多个线程要执行,CPU 只能通过上下文切换的方式来执行不同的线程。
上下文切换需要做两个事情: ① 保存运行线程的执行状态;② 让处于等待中的线程执行;

这两个过程需要 CPU 执行内核相关指令实现状态保存,如果较多的上下文切换会占据大量 CPU 资源,从而使得 cpu 无法去执行用户进程中的指令,导致响应速度下降。

二、在 Java 中,文件 IO、网络 IO、锁等待、线程阻塞等操作都会造成线程阻塞从而触发上下文切换CPU 资源过度消耗,也就是在程序中创建了大量的线程,或者有线程一直占用CPU 资源无法被释放,比如死循环!

??CPU 利用率过高之后,导致应用中的线程无法获得 CPU 的调度,从而影响程序的执行效率!

??既然是这两个问题导致的 CPU 利用率较高,于是我们可以通过命令,找到CPU 利用率较高的进程,在通过 Shift+H 找到进程中 CPU 消耗过高的线程,这里有两种情况。
??CPU 利用率过高的线程一直是同一个,说明程序中存在线程长期占用 CPU 没有释放的情况,这种情况直接通过 jstack 获得线程的 Dump 日志,定位到线程日志后就可以找到问题的代码。

??CPU 利用率过高的线程 id 不断变化,说明线程创建过多,需要挑选几个线程 id, 通过 jstack 去线程 dump 日志中排查。

文章来源:https://blog.csdn.net/weixin_44797327/article/details/135313486
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。