Linux如何强制释放已使用的存储空间

具体来说,数值0代表不进行任何释放操作;数值1代表仅释放页缓存;数值2代表释放dentries和inodes对象;而数值3则是最彻底的,代表释放上述所有类型的缓存内容。

评论 (3)

这其实是 drop_caches 的机制,主要目的是缓解内存压力,但千万别在生产环境随便敲,否则磁盘 I/O 会瞬间飙升把服务搞挂。

这里补充个关键点:执行 echo 3 > /proc/sys/vm/drop_caches 之前,务必先 sync 一下。不然直接把 dirty cache 刷成 0 会导致内核忙着写盘,系统反而更卡。

这里有个误区,sysctl vm.drop_caches 只能释放内核缓存,根本不会释放应用层占用的存储(比如打开的文件、未释放的内存映射等)。如果你是想彻底释放磁盘空间,最直接的办法是重启或者找到占用大户(lsof | grep deleted)然后kill进程。别指望写个命令就能像手机清理内存一样完美释放,Linux的内存管理机制和这个不太一样。