19

Linux 内存不够会导致磁盘 io 高吗?

 2 years ago
source link: https://www.v2ex.com/t/824240
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

V2EX  ›  Linux

Linux 内存不够会导致磁盘 io 高吗?

  suqingbin · 4 小时 35 分钟前 · 632 次点击

麻烦请教大家一个问题,有台机器,没有使用 swap ,但是内存不够用了,,cached 有点高,导致磁盘 io 读会高,,我理解 cached 是读缓存,如果不够了,就需要不断从内存换出到磁盘,导致磁盘 io 高,这也理解对吗?

10 条回复    2021-12-24 17:56:02 +08:00

kkadmin

kkadmin      4 小时 33 分钟前

遇到了同样问题,大数据 boy 吗?

snuglove

snuglove      4 小时 18 分钟前

主要还是看磁盘性能;
可以验证是不是不管内存够不够,都高还是怎么样.

eason1874

eason1874      4 小时 18 分钟前

我的理解是:会

内存的作用之一就是共享文件内容,物理内存放不下,虚拟内存又没有,那还怎么共享,不得每次都读硬盘啊

documentzhangx66

documentzhangx66      3 小时 36 分钟前

分情况。

大多数由系统进行内存管理的,无论 Linux 还是 Win 的 app ,都会。

但如果是程序自己进行内存管理的,那得看程序是怎么设计的了。

suqingbin

suqingbin      3 小时 24 分钟前

@kkadmin 不是大数据

liaohongxing

liaohongxing      2 小时 59 分钟前

linux 有个 swap 分区, swap 就是一个文件,在磁盘上, 内存不够会溢出到 swap , 溢出 这个过程就是写磁盘 。会导致磁盘 IO 高,有了 swap 程序不会立即崩溃 ,只是会响应慢。

反之 ,关掉 swap ,就不会写磁盘 。IO 不会高,其中内存不够程序直接崩溃,崩溃后继续被守护拉起,继续循环崩溃,如果时间间隔过短,频繁开启进程会导致 CPU 高。

linux 跟 windows 不一样,有多少内存吃多少。会用空闲的内存缓存文件句柄,常访问的文件等等,那个 cache 就是缓存的句柄,文件,关掉 swap 情况下,是在内存中,这个缓存跟磁盘 IO 影响比较小,读一次就被缓存了。

suqingbin

suqingbin      2 小时 47 分钟前

@liaohongxing 也就是内存不足就会 oom kill 掉程序。磁盘读 io 高可能是有程序在读文件。

dbow

dbow      2 小时 36 分钟前

禁了 swap 就不会,内存用光直接 OOM 杀死程序

yidinghe

yidinghe      2 小时 27 分钟前

这个 IO 应该是进程自身要读写文件产生的,与操作系统无关。虽说要读的文件不在 cache 中就产生磁盘 IO ,但在我看来这属于是从一个优化场景降级为正常场景。

kxuanobj

kxuanobj      2 小时 26 分钟前

你分析是对的。
比如 进程 elf 本身、加载的.so 共享库,它们的代码段等内容在内存中 是“有 backing file 的内存页”,并且它都是 readonly 的。

当内存不足时,Linux 内核会直接从 page cache 中扔掉这类页面。因为可以加载回来,并且由于是 read only 内存页,它与外部存储器上的内容是等价的。抛弃这些页面并不会造成数据上出现问题。

然而,当近程被调度,执行代码时执行到了这块被扔掉的代码,Linux 内核没有办法,只能阻塞进程(表现为进程状态为 D ),然后从外部存储中把这些数据再加载回来。

再加载回来时,也需要内存页,那就需要把其它进程的某些内存页扔掉。而其它进程被调度到时,又要继续循环,扔掉一些内存页。

最终恶性循环造成磁盘 IO 占用高,CPU 占用表现为%iowait 占用过高。

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK