在linux中, 可以通过对/proc/sys/vm/drop_caches设置不同的数值,从而实现不同内容的回收,从linux官方文档中可以看到:
image.png
释放物理页缓存
echo 1 > /proc/sys/vm/drop_caches
释放可回收的slab对象,包含inode and dentry
echo 2 > /proc/sys/vm/drop_caches
同时释放 页、目录、索引节点缓存:
echo 3 > /proc/sys/vm/drop_caches
操作影响
- 上述操作是无害的操作,并且智慧释放完全没有使用的内存对象。脏对象(dirty objects)将继续被使用直到它们被写入到磁盘中,所以内存脏对象不会被释放。
- 如果在执行drop_caches之前执行sync指令,则会将脏对象刷新到磁盘中,这样drop_caches操作会释放出更多内存。
- 回收内存过程中可能会导致cpu和io比较高,也可以在进程运行过程中进行回收,但是更多的建议在停止进程后回收,影响较小。
注意:drop_caches需要花费一些时间(在终端中可以看到大约几十秒时间),此时再次使用cat /proc/buddyinfo可以看到立即出现了大量高阶内存页。
但是drop_caches这个触发动作是一次性的,也就是说,并不因为cat /proc/sys/vm/drop_caches时显示输出内容是3就表示系统不缓存内容。相反,一旦完成drop_caches,系统立即自动对后续内存对象进行缓存。所以要再次触发缓存清理,需要再次执行 echo 3 > /proc/sys/vm/drop_caches。
建议操作
建议操作为:sync && echo 2 > /proc/sys/vm/drop_caches
网友评论