一句话:Cache缓存文件系统的数据,提高文件读取性能,动态调整大小以优化内存利用。Buffer缓存块设备的写操作数据,提高写操作性能,通过合并写操作减少磁盘 I/O。
Cache(缓存)
作用
文件系统缓存:Cache 主要用于缓存从硬盘读取的数据,以加快对文件的访问速度。通过将常用的数据保存在内存中,可以减少磁盘 I/O 操作,从而提高系统性能。
特点
缓存文件内容:Cache 缓存的是文件的内容。如果一个文件被频繁读取,文件内容会被缓存到内存中,以便后续访问时可以直接从内存中获取,而不需要再次访问磁盘。
内存管理策略:当系统内存不足时,Cache 中的数据会被释放,以腾出内存给其他应用程序使用。
动态调整:Cache 的大小会根据系统的内存使用情况动态调整。系统会尽量利用空闲内存来缓存文件数据,以提高性能。
Buffer(缓冲)
作用
块设备缓存:Buffer 主要用于缓存数据块设备的读写操作。它缓存在内存中等待写入磁盘的数据,以便高效地进行磁盘写操作。
特点
缓存块设备的数据:Buffer 缓存的是即将写入磁盘的数据块。当一个程序向磁盘写数据时,数据首先被写入 Buffer,然后由内核决定何时将这些数据写入磁盘。这种机制可以减少磁盘写操作的频率,提高系统的写性能。
提高写操作性能:通过将多个写操作合并在一起,Buffer 可以减少磁盘写操作的次数,从而提高写性能。
同步写入:当 Buffer 中的数据需要写入磁盘时,系统会进行同步写入,确保数据的持久性。
如何查看 Cache 和 Buffer 的使用情况
使用:free命令
free: invalid option -- 'e'
Usage:
free [options]
Options:
-b, --bytes show output in bytes
-k, --kilo show output in kilobytes
-m, --mega show output in megabytes
-g, --giga show output in gigabytes
--tera show output in terabytes
--peta show output in petabytes
-h, --human show human-readable output
--si use powers of 1000 not 1024
-l, --lohi show detailed low and high memory statistics
-t, --total show total for RAM + swap
-s N, --seconds N repeat printing every N seconds
-c N, --count N repeat printing N times, then exit
-w, --wide wide output
--help display this help and exit
-V, --version output version information and exit
For more details see free(1).
total used free shared buff/cache available
Mem: 1.7G 1.1G 107M 732K 494M 439M
Swap: 1.0G 0B 1.0G
buff/cache:表示系统用于缓存和缓冲的内存总量。
available:表示可供新应用程序使用的内存,包括未使用的内存和
buff/cache
中可回收的部分。
为什么Linux系统中的buff/cache会不断增长?
buff/cache会不断增长是因为 Linux 内核设计的内存管理机制旨在最大化利用系统内存,提高系统性能。内核会尽可能多地利用空闲内存来缓存数据,以减少磁盘 I/O 操作,提升文件系统和块设备的读写效率。
文件系统缓存(Cache)
缓存文件内容:当系统读取文件时,内核会将文件内容缓存到内存中,以便后续访问时可以直接从内存中读取,而无需再次访问磁盘。这种机制大大加快了文件的读取速度。
增加命中率:通过缓存频繁访问的数据,可以提高缓存命中率,从而减少磁盘访问次数,提升系统整体性能。
块设备缓存(Buffer)
缓存写操作:当程序向磁盘写数据时,数据首先被写入内存中的缓冲区(Buffer),然后由内核决定何时将这些数据实际写入磁盘。这种机制可以合并多次写操作,减少磁盘写操作的频率。
优化写入性能:通过延迟写入和合并写操作,内核可以更高效地管理磁盘 I/O,提高写操作的性能。
内存管理策略
最大化内存利用率:内核会尽可能利用所有可用内存来缓存数据,以提高系统性能。未被应用程序占用的内存都会用于缓存和缓冲。
动态调整:当应用程序需要更多内存时,内核会自动释放部分缓存和缓冲区,以满足应用程序的需求。因此,
buff/cache
的内存使用是动态调整的。
如何清理缓存和缓冲区
sync; echo 1 > /proc/sys/vm/drop_caches # 清理页缓存
sync; echo 2 > /proc/sys/vm/drop_caches # 清理dentries和inodes
sync; echo 3 > /proc/sys/vm/drop_caches # 清理页缓存、dentries和inodes