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

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 日志中排查。

相关推荐

  1. CPU 系统反应怎么排查

    2023-12-31 11:34:02       33 阅读
  2. Mysql:cpusql查询方法

    2023-12-31 11:34:02       36 阅读
  3. 如何排查cpu使用过

    2023-12-31 11:34:02       22 阅读
  4. 排查服务器cpu运行过

    2023-12-31 11:34:02       7 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-31 11:34:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-31 11:34:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-31 11:34:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-31 11:34:02       18 阅读

热门阅读

  1. Debezium发布历史36

    2023-12-31 11:34:02       27 阅读
  2. 四十八----react实战

    2023-12-31 11:34:02       39 阅读
  3. 四、Spring IoC实践和应用(三种配置方式总结)

    2023-12-31 11:34:02       32 阅读
  4. XXL-JOB学习笔记-基于代码实现新建、修改任务

    2023-12-31 11:34:02       32 阅读
  5. 12、defer

    2023-12-31 11:34:02       33 阅读
  6. 面试要点,算法,数据结构等练习大全

    2023-12-31 11:34:02       30 阅读
  7. 设计模式之策略模式

    2023-12-31 11:34:02       29 阅读
  8. Redis 的常用命令

    2023-12-31 11:34:02       33 阅读
  9. RK3566 ANDROID 11 平台上适配移远EC200A

    2023-12-31 11:34:02       42 阅读