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


2

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

这是否意味着执行时从内存中删除了脏缓存sync?有人可以给我更可靠的证明吗?


Answers:



0

这将导致内核从内存中删除干净的缓存,牙科和索引节点,从而导致该内存变为可用。

要释放页面缓存:

echo 1 > /proc/sys/vm/drop_caches

要释放牙齿和索引节点:

echo 2 > /proc/sys/vm/drop_caches

要释放页面缓存,牙科和索引节点:

echo 3 > /proc/sys/vm/drop_caches

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



0

他们不是 :-)。这是可靠的证明:

$ 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)。与此相比,组合syncdrop_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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.