关于echo 2 > /proc/sys/vm/drop_caches命令的清理目标问询
关于
echo 2 > /proc/sys/vm/drop_caches命令的清理目标问询 嗨,我来给你掰扯清楚这个命令的清理目标,以及为啥你执行后Slab内存还是居高不下:
首先,/proc/sys/vm/drop_caches是Linux内核提供的内存调优接口,不同数值对应不同的清理范围,其中echo 2 > /proc/sys/vm/drop_caches专门清理的是文件系统的元数据缓存——也就是目录项(dentry)和inode缓存,这些属于Slab分配器管理的可回收对象,但只是Slab内存里的一部分而已。
那为啥你执行完命令后可用内存涨了,但Slab的数值还是很高?因为Slab分配器里还包含大量内核运行必需的不可回收对象:比如进程描述符、内核线程的数据结构、各类网络相关的核心缓存结构等等,这些是内核正常运转离不开的,自然不会被这个命令清理。
顺便给你补充下drop_caches其他常用取值对应的清理范围:
echo 1 > /proc/sys/vm/drop_caches:只清理页缓存(pagecache),也就是普通文件的内容缓存echo 3 > /proc/sys/vm/drop_caches:同时清理页缓存、目录项和inode缓存
简单总结:这个命令只会清理Slab里标记为可回收的元数据缓存,不会碰内核依赖的核心Slab对象,所以你的Slab内存数值没怎么变是完全正常的~
备注:内容来源于stack exchange,提问作者M.Ozawa




