2017-02-21 63 views
0

我对Linux内存管理概念很新,在阅读一些内存管理相关文档时我有一些基本疑问请澄清我。什么是内存回收在linux中

下面考虑的是我的配置

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

我的理解,如果可用内存比vm.min_free_kbytes OS少了会回收内存。

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

2-如果它从RAM复制到交换存储器,那么如果我没有使用SWAP存储器,会发生什么情况?

3- swappiness总是大于vm.min_free_kbytes?

4-vm.vfs_cache_pressure的含义是什么?

谢谢你.. !!

回答

0
  1. 内存回收是通过向其他位置存储数据的其他位置创建更多空闲RAM页面的机制。它与文件无关。当需要更多RAM时,数据从RAM中丢弃(如果可以重新获取,则丢弃)或复制到交换文件(因此数据可以重新获取)。

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

  3. swappiness以百分比表示内核使用swap的倾向(即使不是严格需要),以便为内存请求准备足够的ram。简而言之,100%的swappiness意味着内核试图始终交换,swappiness为0意味着内核试图不交换(但是有一些特殊的值)。 min_free_kbytes表示真正的kylobytes,它不是一个百分比,并且它是为了让内核正常工作而应该始终空闲的最小数量。即使开始内存回收,也可能需要更多内存来完成这项工作:如果要获得一些内存,只需要一点内存,但却没有它,这将是灾难性的! :-)

  4. vfs_cache_pressure再次是一个百分比。它指示内核尝试摆脱用于文件系统(vfs =虚拟文件系统)的(内存)缓存的程度。文件系统的缓存是一个不错的选择,因为它使信息易于从磁盘读取。不幸的是,如果计算机需要经常使用文件系统,它必须读取并再次读取,并且再次读取相同的数据。缓存它是一个巨大的性能提升。当然,如果一个系统的磁盘I/O很少,那么这个缓存是在内存饿的时候最好的选择。

所有这些事情都succintly这里解释:https://www.kernel.org/doc/Documentation/sysctl/vm.txt

+0

感谢很多关于你的答案,只有一个问题要得到清晰 如果没有交换分区, min_free_kbytes = 2G 和系统空闲内存达到2GB是否将数据(Cache.buffer,..)删除或系统将进入OOM状态? –

+0

@MohamedAshraf我链接的文档非常简洁,并且表示“将此设置得太高会立即将您的机器OOM”。我认为只要内核能够抛弃数据(实际上只有缓存),内核就会工作,然后进入一个无限循环,试图达到指示的min_free_kbytes,而不成功。但我不确定。 – linuxfan