什么是linux中的内存回收

时间:2017-02-21 04:33:41

标签: linux memory-management linux-kernel

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

考虑下面是我的配置

function return_post_type_layout_settings() {
    $public_post_type = get_post_types(
        array(
            '_builtin' => TRUE,
            'public'   => TRUE
        )
    );
    sort($public_post_type, SORT_NATURAL);
    $layout_options = array();
    foreach($public_post_type as $post_type) {
        $layout_options[] = 
            array('title' => ucwords($post_type) . ' Layout', 'fields' => array(
                array('id' => $post_type, 'type' => 'grid', 'span' => '6-12', 'fields' => array(
                    // ----------------------------------------------------------------------
                    // FIELD - Header Settings Panel
                    // ----------------------------------------------------------------------
                    array('message' => 'Enable ' . ucwords($post_type). ' Header Settings?', 'video' => 'QAEjuDpIaE4', 'type' => 'title_with_help'),
                    array('id' => $post_type . '_enable_header', 'type' => 'switcher'),
                ))
            ))
        ;
    }
    return $layout_options;
}

我理解空闲内存是否小于vm.min_free_kbytes操作系统将回收内存。

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

2-如果它从RAM中复制到交换内存,那么如果我没有使用SWAP内存将会发生什么?

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

4-vm.vfs_cache_pressure的重要性是什么?

谢谢.. !!

1 个答案:

答案 0 :(得分:2)

  1. 内存回收是通过向其他位置投放其中的数据来创建更多可用RAM页面的机制。它与文件无关。当需要更多RAM时,数据从RAM中删除(如果可以重新删除则被删除)或复制到交换文件(因此数据可以被反映)。

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

  3. swappiness以百分比表示内核使用交换的趋势,即使不是非常严格需要,以便为内存请求准备足够的内存。简单地说,100%swappiness意味着内核尝试始终交换,0的swappiness意味着内核尝试不进行交换(但是有一些特殊值)。 min_free_kbytes表示真正的kylobytes,它不是一个百分比,它是应该始终免费的最小量,以便让内核运行良好。即使启动内存回收也可能需要更多内存才能完成这项工作:如果要获得一些内存,只需要一点内存但你没有内存就会是灾难性的! : - )

  4. vfs_cache_pressure又是一个百分比。它表示内核试图摆脱用于文件系统(vfs =虚拟文件系统)的(内存)缓存的程度。文件系统的缓存非常适合丢弃,因为它可以使磁盘上的信息易于读取。不幸的是,如果计算机需要经常使用文件系统,它必须再次读取和读取,并再次读取相同的数据。缓存它是一个很大的性能提升。当然,如果系统执行的磁盘I / O很少,那么当内存耗尽时,这个缓存是最好的选择。

  5. 所有这些都在这里简明扼要地解释:https://www.kernel.org/doc/Documentation/sysctl/vm.txt