一句话: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)

  1. 缓存文件内容:当系统读取文件时,内核会将文件内容缓存到内存中,以便后续访问时可以直接从内存中读取,而无需再次访问磁盘。这种机制大大加快了文件的读取速度。

  2. 增加命中率:通过缓存频繁访问的数据,可以提高缓存命中率,从而减少磁盘访问次数,提升系统整体性能。

块设备缓存(Buffer)

  1. 缓存写操作:当程序向磁盘写数据时,数据首先被写入内存中的缓冲区(Buffer),然后由内核决定何时将这些数据实际写入磁盘。这种机制可以合并多次写操作,减少磁盘写操作的频率。

  2. 优化写入性能:通过延迟写入和合并写操作,内核可以更高效地管理磁盘 I/O,提高写操作的性能。

内存管理策略

  1. 最大化内存利用率:内核会尽可能利用所有可用内存来缓存数据,以提高系统性能。未被应用程序占用的内存都会用于缓存和缓冲。

  2. 动态调整:当应用程序需要更多内存时,内核会自动释放部分缓存和缓冲区,以满足应用程序的需求。因此,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