扫一扫下方二维码,关注本站官方公众号
获取永久解锁本站全部文章的验证码
还能不定期领现金红包

CPU、内存、磁盘IO之间的关系-Go语言中文社区

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


一、名词解释

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

内存: 车间,工人干活的地方,车间中加工原料,当车间中没有原料了,在从仓库中取原料,对原料进行加工

内存本身有一定的存储空间,对内存中的数据进行处理的速度比从硬盘取数据再处理的速度快很多。

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


二、三者之间的关系

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

就像人吃饭一样,cpu就是人,内存就是碗,硬盘就是饭锅!

当cpu进程等待,会造成内存开销的增加,内存不够用的时候会用到虚拟内存,导致虚拟内存的增加,这时磁盘IO开销就会增加,系统态sy%提升,cpu开销增加;内存里数据不够用,才用磁盘中取数据。


三、性能高因素

1、系统CPU利用率高是什么原因?

系统中断和切换频繁很耗用CPU,共享资源竞争,大量io交互。CPU太差,主频太低,都是形容CPU差。

苹果系统一直是单线程,因为这样减少了N多插队的请求导致的中断减速.

2、用户CPU利用率高是什么原因?

计算量大,比如运算,连接查询,数据统计;

非空闲等待,比如IO等待、资源争用(同一资源被不同线程请求,而此资源又需要保持一致性,只能前一个释放后一个

再访问,这样导致的等待);

过多的系统调用,系统调用即调用操作系统提供的程序接口,比如Java项目中写日志,会调用系统接口进行日志写操作,这样

会导致系统CPU使用率过高;

过多的中断,中断是CPU用来响应请求的机制,比如键盘的输入,鼠标的点击等都会产生中断,中断是通知CPU有任务需

要响应,CPU停下正在执行的程序来响应当前的中断;

3、内存吃紧的原因?

多数是过多的页交换和内存泄漏

页交换:内存不够用来存储需要的数据时,操作系统会把原内存中的部分内容释放掉(移除或者存入磁盘),然后把需要

的内容载入,这个过程就是页交换。

4、下面IO高的原因是?

读写量大;磁盘太慢,是因为转速慢,或者磁头少,或者RAID 型号不太OK(RAID 有  0 1 5 10 100 等等,有的可以做存储盘,有的可以做备份盘);

内存不足,操作系统就会用虚拟内存,肯定要用系统的交换区了,比如LINUX 的SWAP,就造成分页增多;

如果你是老板,你如何检查打工仔的效率(性能)呢? 我们一般会通过以下这些信息来判断打工仔是否偷懒:

(1)、打工仔接受和完成多少任务并向老板汇报了(中断);

(2)、打工仔和老板沟通、协商每项工作的工作进度(上下文切换);

(3)、打工仔的工作列表是不是都有排满(可运行队列);

(4)、打工仔工作效率如何,是不是在偷懒(CPU 利用率);


四、系统中的上下文切换 、运行队列等

上下文切换 :每个CPU(或多核CPU的每个核心)在同一时间只能执行一个线程<不包括超线程CPU>,Linux采用抢占式调度。

当线程执行到达一个时间片后,如果线程有IO阻塞或高优先级线程要执行的时候,Linux将执行线程切换,切换前先保存当

前线程执行状态(现场),并恢复待执行线程状态,这个过程就叫做上下文切换。在Java应用中,文件IO、网络IO、锁等待、线

程Sleep操作都会使该线程进行阻塞或睡眠状态,从而触发上下文切换。频繁的上下文切换会造成内核占用较高的CPU,使得

响应速度下降。

运行队列 :每个CPU核心都维护了一个可运行队列,例如一个4核CPU,启动8个线程,且8个线程都处于可运行状态,平均

分配情况下,每个核心的可运行队列里就有2个线程。通常而言,系统的load是由CPU运行队列决定的,假设以上状态 维持

了1分钟,则1分钟内系统load就是2。运行队列值越大,代表线程要消耗越长的时间才能执行完成。通常建议每个核心运行

队列为1-3个。

利用率 :CPU利用率指在用户进程,内核,中断处理,IO等待以及空闲五个部分百分比,这五个值是用来分析CPU消耗情

况的关键指标。Linux System and NetWork Performent Monitoring建议用户进程/内核消耗比例为 65%-70% / 30%-3

5% 左右。


版权声明:本文来源,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2021-06-03 14:45
  • 阅读 ( 308 )
  • 分类:运维

0 条评论

请先 登录 后评论

官方社群