磁盘读频繁,数据量大  ---> iowait高 ---> CPU飙升

IO(input output)主要指:文件IO,网络IO。

“等待IO就绪“究竟等的什么?

你一定不止在一个地方看到类似"cpu等待IO就绪,线程挂起..."的描述,不知你有没有想过CPU到底在等待个啥,等待个寂寞吗?为什么CPU要等待呢?CPU不能参与吗?

首先,cpu有两种状态,用户态和内核态,cpu会根据需要在两种状态之间切换。

用户态和内核态的cpu有什么区别呢?

想想古时候的将军,他手里握有兵权,但是他调用军队是需要有兵符的,没有兵符,他就没办法调兵遣将。

没了兵符的将军就是一个普通老百姓,只拥有有普通公民的权利,所以一个人有没有持有兵符,拥有的权限不一样。

一个人有兵符,你就是将军(将军态,类似内核态),你就能调动军队资源;没有兵符,你就是一介布衣(布衣态,类似用户态),拥有普通权利而已。

cpu同理,内核态的cpu有较高的权限,它能调用一些高级别的资源,比如访问一些安全级别较高的地址空间。

其次,计算机中存储是分结构的。除此之外,主存(内存)这一层面内部同样进行了逻辑划分,分为用户空间和内核空间。

顾名思义,内核空间只有处于内核状态的cpu才能访问的。

一个军队里,将军不可能管理所有人,他会设立千夫长,百夫长来管理。

cpu同样将部分职责交给了另一个硬件,叫作DMA。

“读操作”时,DMA负责将数据从磁盘拷贝到内核空间,注意是拷贝不是移动,然后cpu再从内核空间拷贝到用户空间。所以,cpu等待io就绪,在“读操作”时,等的就是DMA将数据从磁盘拷贝到内核空间。

为什么CPU要将它交给DMA搞?

因为CPU处理数据的速度远远大于IO准备数据的速度。

磁盘到内核空间的拷贝太慢了(想必你也知道不同级别的存储结构读写速度不一样),CPU的时间很宝贵的,它应该去做一些价值更大的东西。

CPU :工人,干活的,判断以及逻辑处理。

内存: 车间,工人干活的地方,车间中加工原料,当车间中没有原料了,在从仓库中取原料,对原料进行加工。内存本身有一定的存储空间,对内存中的数据进行处理的速度比从硬盘取数据再处理的速度快很多。

硬盘 :仓库,原料,数据存储。

CPU对数据进行判断以及逻辑处理,本身不能存储数据,这时cpu从内存取数据进行逻辑计算,如果内存没有数据,才会从硬盘读数据到内存,再对数据进行处理。

你想象,就像人吃饭一样,cpu就是人,内存就是碗,硬盘就是饭锅。

当cpu进程等待,会造成内存开销的增加,内存不够用的时候会用到虚拟内存,导致虚拟内存的增加,这时磁盘IO开销就会增加。

IO 性能对于一个系统的影响是至关重要的。

一个系统经过多项优化以后,瓶颈往往落在数据库;而数据库经过多种优化以后,瓶颈最终会落到 IO 。而 IO 性能的发展,明显落后于 CPU 的发展。redis也好, mongoDB也好,这些流行技术的背后都在直接或者间接地回避 IO 瓶颈,从而提高系统性能。

参考

CPU、内存、磁盘IO之间的关系

http://blog.itpub.net/31397003/viewspace-2650835/

CPU和磁盘IO实战笔记总结

https://www.cnblogs.com/zhangyjblogs/p/14163607.html

面试官问我Linux的网络IO模式怎么办?

https://juejin.cn/post/6844904170663706638

【io】io等待为什么引发cpu过高?相关推荐

  1. CPU load高但CPU usage低问题排查

    讲故事 最近服务总是出现 cpu load高的告警,且告警经常还出现在低峰期的凌晨,所以很明显不是用户流量导致的负载高,但是 cpu buzy却很低.查看内存使用情况:mem.memused 接近10 ...

  2. 单片机小白学步系列(二十三) IO口原理知识补充:双向IO口、互补推挽、高阻态

    由于之前考虑不周,本篇在IO口原理知识的基础上,进一步补充一些知识. ================================================= 双向IO口的输出:互补推挽 在 ...

  3. C#正则表达式引发的CPU跑高问题以及解决方法

    C#正则表达式引发的CPU跑高问题以及解决方法 参考文章: (1)C#正则表达式引发的CPU跑高问题以及解决方法 (2)https://www.cnblogs.com/cmt/p/csharp_reg ...

  4. mysql tcmalloc_技术分享 | tcmalloc解决mysqld实例引发的cpu过高问题

    原创:任坤作者简介 任坤,现居珠海,先后担任专职 Oracle 和 MySQL DBA,现在主要负责 MySQL.mongoDB 和 Redis 维护工作. 背景 MySQL 版本:5.6.29,普通 ...

  5. SQLSERVER排查CPU占用高的情况

    今天中午,有朋友叫我帮他看一下数据库,操作系统是Windows2008R2 ,数据库是SQL2008R2 64位 64G内存,16核CPU 硬件配置还是比较高的,他说服务器运行的是金蝶K3软件,数据库 ...

  6. Java定位CPU使用高问题--转载

    原文地址:http://www.cnblogs.com/guoyuqiangf8/p/3545687.html 1.TOP命令,查询消耗CPU高的进程号 PID,并记录下来,按下键盘"H&q ...

  7. dump分析工具_Java应用CPU过高,如何排查?参考解决思路和常用工具总结

    本文总结了一些常见的线上应急现象和对应排查步骤和工具.分享的主要目的是想让对线上问题接触少的同学有个预先认知,免得在遇到实际问题时手忙脚乱.毕竟作者自己也是从手忙脚乱时走过来的. 只不过这里先提示一下 ...

  8. JAVA Linux 排查CPU 过高的方法

    方法一: 1 ps -ef | grep java 查找java 进程号 2 top -p PID -H 观察占用CPU较多的线程 3 找出CPU消耗较多的线程id,如15844,将15844转换为1 ...

  9. java进程cpu使用率高_什么会导致Java应用程序的CPU使用率飙升?

    问题 无限循环的while会导致CPU使用率飙升吗? 经常使用Young GC会导致CPU占用率飙升吗? 具有大量线程的应用程序的CPU使用率是否较高? CPU使用率高的应用程序的线程数是多少? 处于 ...

  10. mysql利用cpu率高_MySQL CPU 使用率高的原因和解决方法

    用户在使用 MySQL 实例时,会遇到 CPU 使用率过高甚至达到 100% 的情况.本文将介绍造成该状况的常见原因以及解决方法,并通过 CPU 使用率为 100% 的典型场景,来分析引起该状况的原因 ...

最新文章

  1. 如何加强网络安全 这7种建议你不可不知!
  2. 为什么我使用了索引,查询还是慢?
  3. Java中的ArrayList的初始容量和容量分配
  4. HTML示例06---水平线
  5. ABAP学习笔记之五-报表的事件 [翱翔云天 ]
  6. c语言中关键字的分类,C语言关键字分类整理
  7. wifi6无线网卡驱动linux,ROG R6E Omega换wifi 6无线网卡教程
  8. asp毕业设计——基于asp+access的工资管理系统设计与实现(毕业论文+程序源码)——工资管理系统
  9. 嵌入式--Flash操作中的标准SPI,Dual SPI,Quad SPI
  10. 如何查看自己windows密钥
  11. iol植入手术过程_年龄相关性白内障phaco+Iol植入术的手术配合及体会
  12. 《Essential C++》学习笔记 第三章:泛型编程风格(一)
  13. s3cmd 快速评估RADOSGW的性能
  14. 人工智能是怎么准备训练样本的
  15. ILI9341的使用之【八】ASCII字符显示及驱动分析
  16. 李航《统计学习方法》第二版第一章-泛化误差
  17. kindEditor 富文本编辑器 使用介绍
  18. web前端网页制作课作业——用DIV+CSS技术设计的家乡旅游主题网站
  19. 一个grpcServer实现多个proto文件
  20. jquery slider_使用jQuery UI Slider创建音量控制器

热门文章

  1. Windows VM虚拟机安装苹果雪豹操作系统
  2. uniapp加激励广告代码方法
  3. 如何导入Unity网页端资源商店的资源
  4. word排版学习笔记
  5. Latex排版学习笔记(4)——Latex插入项目符号和编号
  6. 用LABwindows/CVI创建简单学生管理器
  7. 多重重要性采样(MIS)与光线追踪技术
  8. 几种微弱信号处理电路
  9. html页面弹出 聊天框,网页弹出在线交流聊天窗口的功能如何实现 - 快商通
  10. 亚马逊Amazon广告API如何申请注册?