同步并写入 /proc/sys/vm/drop_caches 真的会清空所有磁盘缓存/缓冲区吗?

同步并写入 /proc/sys/vm/drop_caches 真的会清空所有磁盘缓存/缓冲区吗?

当您想要清空磁盘缓存/缓冲区时,通常会发出以下命令:

# sync && echo 3 > /proc/sys/vm/drop_caches

但输入该命令后,free并没有真正0buff/cache列中报告。这是一个例子:

# free -m
              total        used        free      shared  buff/cache   available
Mem:          7.6Gi       2.9Gi       3.6Gi       238Mi       1.1Gi       4.1Gi
Swap:         9.8Gi       1.0Mi       9.8Gi
Total:         17Gi       2.9Gi        13Gi
                                                                                                                 
# sync && echo 3 > /proc/sys/vm/drop_caches

# free -m
              total        used        free      shared  buff/cache   available
Mem:          7.6Gi       2.8Gi       4.2Gi       224Mi       588Mi       4.2Gi
Swap:         9.8Gi       1.0Mi       9.8Gi
Total:         17Gi       2.8Gi        13Gi

所以,缓存中有1.1G,然后下降到了588M

这能588M降到吗0?如果(可能)不是,为什么?并且,有没有办法知道发出sync并写入文件后会提前留下多少缓存/缓冲区/proc/sys/vm/drop_caches

答案1

不,它永远不会降至零,因为缓存不仅包括(通常打开的)文件的缓冲区,还包括正在运行的应用程序和库的磁盘映像。

并且,有没有办法知道发出同步并写入 /proc/sys/vm/drop_caches 文件后将提前留下多少缓存/缓冲区?

对我来说,这看起来是一个非常不平凡的任务,但可能有一个解决方案。计算打开的应用程序/库文件的大小可能会让您找到正确的方向,但事实并非如此,因为例如,如果您正在运行 Google Chrome,其二进制文件的大小为 160MB,但它并没有完全缓存,因为您没有同时运行每个功能。

您可以计算内存范围,从中/proc/$PID/maps必须接近所需的答案,并且还允许您查看正在运行的应用程序之间共享哪些范围。

相关内容