Zam*_*ues 20 memory linux-kernel free-command
之前已经问过这个问题,但是不想再次更新同一个线程,因为它是一个旧线程.
想要从free
命令输出中的"缓冲区"和"缓存"列中澄清自己.
这就是我的理解......
缓冲区是数据存储在内存中但尚未刷新到磁盘的东西.数据将由bdflush
守护进程定期刷新到磁盘,或者我们可以通过运行sync
命令手动执行.
另一方面,缓存是程序/数据,它被加载到内存中但保留在内存中,因此如果再次需要,它将很快可用.
为了理解缓冲区的概念,我尝试了以下实验......
这是free
我桌面上的命令读取
[zama@localhost ~]$ free -m total used free shared buffers cached Mem: 2897 465 2431 0 30 230 -/+ buffers/cache: 204 2692 Swap: 4000 0 4000 [zama@localhost ~]$ sync [zama@localhost ~]$ free -m total used free shared buffers cached Mem: 2897 466 2431 0 30 230 -/+ buffers/cache: 205 2691 Swap: 4000 0 4000
执行sync
命令后,我无法看到缓冲区减少.
接下来我尝试了以下内容...试图将一个巨大的文件写入磁盘.
[zama@localhost ~]$ dd if=/dev/zero of=test bs=1024k
正如预期的那样,缓存的值应该增加并且free正在确认这一点.
@localhost ~]# free -m total used free shared buffers cached Mem: 2897 1466 1430 0 32 1127 -/+ buffers/cache: 306 2590 Swap: 4000 0 4000
我再次执行sync
命令然后检查使用free
.我可以看到缓冲区值从free
命令输出中减少.缓存没有减少.这意味着执行dd
coomand 后RAM中的脏页已刷新到磁盘.
@localhost ~]# free -m total used free shared buffers cached Mem: 2897 1466 1430 0 10 1127 -/+ buffers/cache: 306 2590 Swap: 4000 0 4000
然后我更新了drop_cache
内核参数,以便删除缓存值
[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 total used free shared buffers cached Mem: 2897 299 2597 0 1 74 -/+ buffers/cache: 224 2672 Swap: 4000 0 4000
因此,我的初始声明"缓冲区"是尚未刷新到磁盘的RAM数据看起来是正确的.
请指导我是否朝着正确的方向前进.
小智 24
free命令中的列标题有点贴错标签,至少从linux用户的角度来看(而不是开发人员).以下是对标题含义的澄清:
总计:是的,这是总公羊.
used: 这可能是最混乱的专栏.这是应用程序使用的内存和其他"临时"(缓冲区+缓存)使用的内存的混合,如果需要,它实际上是可用的.因此从技术上讲,内存是真正被使用的,但是如果应用程序需要,大部分内存都可用.如果Linux系统可以使用"临时"使用的内存来帮助加快系统性能,否则系统会更频繁地从磁盘读取.大多数此类内存都显示在"缓存"列下.如果应用程序需要内存,则Linux系统会释放此内存.
免费: 是的,这个纯粹的自由和未被触及的记忆.
shared: 专门分配给多个进程使用的内存
缓冲区:用于帮助某些进程的临时内存
cache: 操作系统可用并"借用"的内存,以帮助加速许多Linux OS操作.如果应用程序需要,系统会释放该内存.
以- /+ buffers/cache开头的行通常比第一个Mem行更有用.free和- /+缓冲区/缓存的交集基本上就是"可用"内存的交集.