Linux内存管理机制简单分析(4)

vm.drop_caches是最常用到的参数,因为Linux的Page cache(文件系统缓存)机制会导致大量的内存被用于文件系统缓存,包括数据缓存和元数据(dentry、inode)缓存。当内存不足时,我们通过该参数可以快速释放文件系统缓存:

To free pagecache:
    echo 1 > /proc/sys/vm/drop_caches
To free reclaimable slab objects (includes dentries and inodes):
    echo 2 > /proc/sys/vm/drop_caches
To free slab objects and pagecache:
    echo 3 > /proc/sys/vm/drop_caches

vm.min_free_kbytes

vm.min_free_kbytes用于决定内存低于多少时启动内存回收机制(包括上面提到的文件系统缓存和下面会提到的可回收的Slab),该值默认值较小,在内存较多的系统设置为一个较大的值(如1GB)可以在内存还不会太少时自动触发内存回收。但也不能设置太大,导致频繁应用程序经常被OOM killed。

sysctl -w vm.min_free_kbytes=1024000

vm.min_slab_ratio

vm.min_slab_ratio用于决定Slab池里可回收的Slab空间在该Zone里的占比达到多少时进行回收,默认是5%。但经过笔者试验,当内存充足时根本不会触发Slab回收,也只有在内存水位线达到上面min_free_kbytes时才会触发Slab回收。该值最小可以设置为1%:

sysctl -w vm.min_slab_ratio=1

总结

以上简单描述了Linux内存管理机制和几个常用的内存管理内核参数。

参考资料

Understanding The Linux Kernel 3rd Edition
[Linux Physical Memory Description]]()

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/12730.html