Linux buffer-cache 占用过高性能调整

💡 原文中文,约3600字,阅读约需9分钟。
📝

内容提要

在Linux中,buffer用于缓存未写入磁盘的数据,cache用于缓存已读取的数据。自Linux 2.6起,二者合并为Page cache,buffer用于块设备,cache用于文件系统。内核会在内存紧张时自动回收缓存,用户可通过调整vm.vfs_cache_pressure参数控制回收频率。

🎯

关键要点

  • 在Linux中,buffer用于缓存未写入磁盘的数据,cache用于缓存已读取的数据。
  • 自Linux 2.6起,buffer和cache合并为Page cache,buffer用于块设备,cache用于文件系统。
  • buffer负责裸设备相关的缓存,cache负责文件系统的缓存。
  • Linux内核会在内存紧张时自动回收缓存,用户可通过调整vm.vfs_cache_pressure参数控制回收频率。
  • 可以通过echo命令手动清除缓存,提供三种清空方式。
  • vm.vfs_cache_pressure参数控制内核回收VFS缓存的频率,值越大回收频率越快。
  • 可以通过/etc/sysctl.conf或/etc/sysctl.d/目录下的配置文件持久化配置vm.vfs_cache_pressure。
  • 不推荐自动定时清理缓存,提供了创建脚本和定时任务的步骤。

延伸问答

Linux中的buffer和cache有什么区别?

buffer用于缓存未写入磁盘的数据,而cache用于缓存已读取的数据。自Linux 2.6起,二者合并为Page cache。

如何手动清除Linux中的缓存?

可以通过echo命令执行以下操作:echo 1 > /proc/sys/vm/drop_caches(清除页面缓存),echo 2 > /proc/sys/vm/drop_caches(清除目录项和inode),echo 3 > /proc/sys/vm/drop_caches(清除所有缓存)。

vm.vfs_cache_pressure参数的作用是什么?

vm.vfs_cache_pressure参数控制内核回收VFS缓存的频率,值越大回收频率越快,默认值为100。

如何持久化配置vm.vfs_cache_pressure参数?

可以通过编辑/etc/sysctl.conf文件或在/etc/sysctl.d/目录下创建配置文件来持久化配置vm.vfs_cache_pressure参数。

Linux内核如何处理内存紧张时的缓存回收?

当内存紧张时,Linux内核会自动回收缓存以释放内存给急需的进程使用,但这会导致系统IO增加。

为什么不推荐自动定时清理缓存?

自动定时清理缓存可能会导致性能下降,因为频繁的回收需要使用锁来查找可释放的对象,增加了系统负担。

➡️

继续阅读