【问题标题】:What is memory reclaim in linux什么是linux中的内存回收
【发布时间】:2017-07-10 13:40:07
【问题描述】:

我对 Linux 内存管理概念非常陌生,在阅读一些与内存管理相关的文档时,我有一些基本的疑问,请澄清我。

考虑下面是我的配置

vm.swappiness=10
vm.vfs_cache_pressure=140
vm.min_free_kbytes=2013265 

我的理解是如果空闲内存少于 vm.min_free_kbytes 操作系统将回收内存。

1- 内存回收是删除不需要的文件还是从 RAM 复制到交换内存?

2- 如果它是从 RAM 复制到交换内存,那么如果我不使用交换内存会发生什么?

3- swappiness 是否总是大于 vm.min_free_kbytes?

4-vm.vfs_cache_pressure有什么意义?

谢谢你..!!

【问题讨论】:

    标签: linux memory-management linux-kernel


    【解决方案1】:
    1. 内存回收是通过将驻留在其中的数据扔到其他地方来创建更多空闲 RAM 页面的机制。它与文件无关。当需要更多 RAM 时,数据会从 RAM 中删除(丢弃,如果可以重新获取)或复制到交换文件(因此数据可重新获取)。

    2. 如果没有交换文件,但应该将一些数据保存到(不存在的)交换区域,则会发生内存不足错误。通常,这会通知试图获取内存的进程(通过 alloc() 和类似方法) - alloc() 失败并返回 NULL。进程可以选择做什么,甚至崩溃。如果内核本身需要内存(通常很少见),则会发生 PANIC 并且系统会完全锁定。

    3. swappiness 以百分比表示,内核使用交换的趋势,即使不是严格需要,以便为内存请求准备充足的 ram。简单地说,100% 的 swappiness 意味着内核尝试总是交换,swappiness 为 0 意味着内核尝试不进行交换(但是有一些特殊值)。 min_free_kbytes 表示实际千字节,它不是百分比,它是为了让内核正常工作而应该始终空闲的最小数量。即使开始内存回收也可能需要更多的内存来完成这项工作:如果要获得一些内存,您只需要一点内存但您没有,那将是灾难性的! :-)

    4. vfs_cache_pressure 又是一个百分比。它指示内核尝试摆脱用于文件系统(vfs=虚拟文件系统)的(内存)缓存的程度。文件系统的缓存非常适合丢弃,因为它使信息易于从磁盘读取。不幸的是,如果计算机需要频繁使用文件系统,它就必须读取、再读取、再读取始终相同的数据。缓存是一个很大的性能提升。当然,如果一个系统的磁盘 I/O 很少,那么这个缓存是在内存不足时丢弃的最佳选择。

    所有这些都在这里得到了简洁的解释:https://www.kernel.org/doc/Documentation/sysctl/vm.txt

    【讨论】:

    • 非常感谢您的回答,如果没有交换分区,请再问一个问题,min_free_kbytes = 2G,系统可用内存达到2GB是数据(Cache.buffer,. .) 将被删除或系统将进入OOM状态?
    • @MohamedAshraf 我链接的文档非常简洁,并说“设置得太高会立即 OOM 你的机器”。我认为只要内核能够丢弃 数据(实际上,只有缓存),内核就会工作,然后会进入一个无限循环,试图达到所指示的 min_free_kbytes,但没有成功。但我不太确定。
    猜你喜欢
    • 2018-04-30
    • 2012-07-06
    • 1970-01-01
    • 2021-07-28
    • 2013-08-31
    • 2014-05-07
    • 1970-01-01
    • 2012-08-24
    • 1970-01-01
    相关资源
    最近更新 更多