Memory “理解”;“缓冲区”;及;“缓存”;自由支配
这已经在前面被询问过了,但是不想再次更新同一个线程,因为它是一个旧线程 我想从Memory “理解”;“缓冲区”;及;“缓存”;自由支配,memory,linux-kernel,free-command,Memory,Linux Kernel,Free Command,这已经在前面被询问过了,但是不想再次更新同一个线程,因为它是一个旧线程 我想从free命令的输出中澄清一下“缓冲区”和“缓存”列 这就是我的理解 缓冲区是指数据存在于内存中但尚未刷新到磁盘的地方。 数据将通过bdflush守护进程定期刷新到磁盘,或者我们可以通过运行sync命令手动完成 另一方面,高速缓存是加载到内存中但保留在内存中的程序/数据,这样,如果再次需要,它将很快可用 为了理解缓冲区的概念,我尝试了以下实验 这是在我的桌面上读取free命令 [zama@localhost ~]$ fr
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
正如预期的那样,缓存值应该增加,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
然后我更新了drop\u cache
kernel参数,以便删除缓存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
所以,我最初说的“缓冲区”是尚未刷新到磁盘的RAM数据,看起来是正确的
请告诉我方向是否正确。我一直理解的是,内存缓冲区用于临时存储从设备(包括磁盘)读取或写入的数据,虽然内存的缓存区用于加快将来从设备读取的速度。这是我的理解:缓冲区告诉您为维护块设备保留了多少内存,但缓存告诉您有多少内存用于文件内容 free命令中的列标题有点标记错误,至少从linux用户(与开发人员相反)的角度来看是这样。以下是标题含义的澄清: 总计:是的,这是总ram 使用:这可能是最混乱的一列。这是应用程序使用的内存和其他“临时”(缓冲区+缓存)使用的内存的混合,如果需要,这些内存实际上是可用的。所以从技术上讲,内存是真正被使用的,但是如果应用程序需要,大部分内存都是可用的。如果linux系统可用,“临时”使用的内存将被借用,以帮助提高系统性能,否则系统将更频繁地从磁盘读取。大部分此类内存显示在“缓存”列下。如果应用程序需要内存,linux系统将放弃该内存 自由:是的,这是纯粹的自由和未触及的记忆 共享:专门分配给多个进程使用的内存 缓冲区:用于帮助某些进程的临时内存 缓存:操作系统“借用”的可用内存,有助于加快许多linux操作系统的运行速度。如果应用程序需要该内存,则系统会放弃该内存
以-/+buffers/cache开头的行通常比第一行Mem更有用。空闲和-/+buffers/cache的交叉点本质上就是“可用”内存。Linux vm子系统将任何空闲、未使用或未分配的内存视为缓冲区/缓存 因此,运行
echo 1>/proc/sys/vm/drop_caches
会指示内核删除或清理页面缓存(页面缓存)、齿状缓存(slab缓存)和索引节点(slab缓存中),并使内存回收并可用
干净的数据缓存页不会被设计释放。如果或当需要分配额外内存时(malloc/calloc/brk/sbrk和friends),内核可以很容易地回收它们,同时它们包含来自磁盘的有用数据,如果需要,可以再次保存磁盘I/O
sync
命令仅将内存中的任何脏页提交到磁盘,它不会释放缓冲区/缓存。删除缓冲区/缓存的唯一方法是使用echo“1”>/proc/sys/vm/drop\u缓存
,或者内核为应用程序请求的新分配回收数据页
pdflush
已被使用每个备份设备信息(BDI)的刷新线程所取代。引用自:
Linux总是尝试使用RAM来加速磁盘操作,方法是使用可用内存来缓存(文件系统元数据)和缓存(包含文件或块设备实际内容的页面)
引用
共享的
/缓冲区
/缓存的
:这显示特定用途的内存使用情况,这些值包含在使用的的值中
第二行给出调整后的第一行值。它给出了已用
的原始值减去总和缓冲区+缓存
,以及免费的原始值加上总和缓冲区+缓存
,因此它的标题。这些新值通常比第一行的值更有意义
最后一行Swap
提供了有关交换空间使用情况的信息。例如,已临时移动到磁盘的内存内容
@localhost ~]# free -m
total used free shared buffers cached
Mem: 2897 1466 1430 0 10 1127
-/+ buffers/cache: 306 2590
Swap: 4000 0 4000
[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
[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