同步命令是否会删除内存中的脏缓存?

同步命令是否会删除内存中的脏缓存?

我知道同步命令将脏缓存刷新到磁盘中。我free先运行命令,然后运行命令sync,然后free再次运行。后一个命令的结果free显示比前一个命令有更多的可用内存。

这是否意味着执行时脏缓存会从内存中删除sync?谁能给我一个更确凿的证据?

答案1

不,没有。我自己检查了很多次,但是不用担心,Linux 内核会非常聪明地照顾你宝贵的内存。读写入磁盘时缓存在 RAM 中的内容 - Linuxhttp://linuxatemyram.com

答案2

这将导致内核从内存中删除干净的缓存、目录项和索引节点,从而使该内存变得空闲。

释放页面缓存:

echo 1 > /proc/sys/vm/drop_caches

释放 dentry 和 inode:

echo 2 > /proc/sys/vm/drop_caches

释放页面缓存、目录项和索引节点:

echo 3 > /proc/sys/vm/drop_caches

由于这是一个非破坏性操作,并且脏对象不可释放,因此用户应首先运行“sync”以确保释放所有缓存的对象。

答案3

他们不是 :-)。这是确凿的证据:

$ dd if=/dev/zero of=test bs=1M count=100
100+0 records in
100+0 records out
104857600 bytes (105 MB, 100 MiB) copied, 0.409106 s, 256 MB/s
$ sync
$ time cat test > /dev/null

real    0m0.027s
user    0m0.000s
sys 0m0.026s

之后数据仍然被缓存sync。您可以通过查看读取文件的时间来判断它已被缓存。 (我有一个旋转硬盘,最大读取速度约为 100MB/s)。将此与sync和的组合进行比较drop_caches

$ sync
$ echo 1 | sudo tee /proc/sys/vm/drop_caches
1
$ time cat test > /dev/null

real    0m1.030s
user    0m0.001s
sys 0m0.073s

相关内容