之前已经问过这个问题,但不想再次更新同一个线程,因为它是一个旧线程。
想在free
命令输出中的“缓冲区”和“缓存”列中澄清自己。
这是我的理解...
缓冲区是数据存在于内存中但尚未刷新到磁盘的地方。数据将由bdflush
守护进程定期刷新到磁盘,或者我们可以通过运行sync
命令手动完成。
另一方面,缓存是加载到内存中但保留在内存中的程序/数据,因此如果再次需要,它将很快可用。
为了理解缓冲区的概念,我尝试了以下实验......
这是free
我桌面上的命令阅读
[zama@localhost ~]$ 免费 -m 缓存的已用空闲共享缓冲区总数 电话:2897 465 2431 0 30 230 -/+ 缓冲区/缓存:204 2692 交换:4000 0 4000 [zama@localhost ~]$ 同步 [zama@localhost ~]$ 免费 -m 缓存的已用空闲共享缓冲区总数 电话:2897 466 2431 0 30 230 -/+ 缓冲区/缓存:205 2691 交换:4000 0 4000
在这里我看不到执行sync
命令后缓冲区减少了。
接下来我尝试了以下...尝试将一个巨大的文件写入磁盘。
[zama@localhost ~]$ dd if=/dev/zero of=test bs=1024k
正如预期的那样,缓存的值应该会增加,并且 free 正在确认这一点..
@localhost ~]# 免费 -m 缓存的已用空闲共享缓冲区总数 电话:2897 1466 1430 0 32 1127 -/+ 缓冲区/缓存:306 2590 交换:4000 0 4000
我再次执行了sync
命令,然后使用free
. 我可以看到缓冲区值从free
command 的输出中减少了。缓存没有减少。这意味着我执行dd
coomand 后 RAM 中的脏页已刷新到磁盘。
@localhost ~]# 免费 -m 缓存的已用空闲共享缓冲区总数 电话:2897 1466 1430 0 10 1127 -/+ 缓冲区/缓存:306 2590 交换:4000 0 4000
然后我更新了drop_cache
内核参数,以便删除缓存 vlaue
[root@localhost ~]# cat /proc/sys/vm/drop_caches 0 [root@localhost ~]# echo "1" > /proc/sys/vm/drop_caches [root@localhost ~]# cat /proc/sys/vm/drop_caches 1
free
现在确认缓冲区和缓存值都已删除。
[root@localhost ~]# free -m 缓存的已用空闲共享缓冲区总数 内存:2897 299 2597 0 1 74 -/+ 缓冲区/缓存:224 2672 交换:4000 0 4000
因此,我最初的声明“缓冲区”是尚未刷新到磁盘的 RAM 数据看起来是正确的。
请指导我是否朝着正确的方向前进。