玖叶教程网

前端编程开发入门

RHEL操作系统中如何控制页高速缓存(page cache)的大小?

Environment

  • Red Hat Enterprise Linux 7
  • Red Hat Enterprise Linux 6
  • Red Hat Enterprise Linux 5
  • Red Hat Enterprise Linux 4

Issue

  • RHEL操作系统中如何控制页高速缓存(page cache)的大小?

Resolution

  • 在RHEL 4,5,6,7操作系统中,页高速缓存是动态调整的, 并没有特定的内核参数可以直接调整其大小。
  • 然而,通过调整虚拟内存的一些参数,可以间接影响页高速缓存的大小。
  • 通过调整sysctl中的一些参数来控制页高速缓存的大小,如下:

vm.vfs_cache_pressure (默认值 = 100)

  • 默认值vfs_cache_pressure=100,在回收页高速缓存(page cache)和交换缓存(swap cache)时,内核会以"相对公平"的比例回收dentries和inodes。
  • 调整内核更趋向于回收内存中保存的目录项缓存(dentry)和索引节点对象 (inode objects)。
  • 减少vfs_cache_pressure值,会使内核更倾向于保留目录项对象(dentry)以及索引节点缓存(inode caches); 增加vfs_cache_pressure 超过100 会使内核更倾向于释放目录项对象(dentry)以及索引节点缓存(inode caches)。
  • 可以通过增加vfs_cache_pressure的值,来使内核更倾向于释放上述缓存,从而限制页高速缓存(page cache)的大小。

vm.dirty_background_ratio (默认值 = 10)

  • 此参数的值代表脏页占总内存的百分比, 当系统中脏页数量达到此值时,内核线程pdflush开始把脏页数据写入存储。
  • 可以通过减少此值,来使pdflush进程更早把脏页写入存储,从而限制页高速缓存的大小。

vm.dirty_ratio (默认值 = 20)

  • 这个参数则指定了当文件系统缓存脏页数量达到系统内存百分之多少时(默认值20%),系统不得不开始处理缓存脏页(因为此时脏页数量已经比较多,为了避免数据丢失需要将一定脏页刷入外部存储);在此过程中很多应用进程可能会因为系统转而处理文件IO而阻塞。
  • 减少此值可使 系统更早来处理内存中的脏页,从而限制页高速缓存的大小。

vm.dirty_writeback_centisecs (Red Hat Enterprise Linux 4 & 5: 默认值 = 499, Red Hat Enterprise Linux 6 and 7: 默认值 = 500)

  • pdflush进程会定时被唤醒,把脏页中的数据写入硬盘。单位是 1/100 秒。缺省数值是500,也就是pdflush进程5秒钟会被唤醒一次。
  • 减少此值可以更频繁的唤醒pdflush进程来处理脏页, 从而限制页高速缓存的大小。

vm.dirty_expire_centisecs (Red Hat Enterprise Linux 4 and 5: 默认值= 2999, Red Hat Enterprise Linux 6 and 7: 默认值 = 3000)

  • 这个参数声明Linux内核写缓冲区里面的数据多“旧”了之后,被唤醒的pdflush进程就开始考虑写到磁盘中去。单位是 1/100秒。缺省是 30000,也就是 30 秒的数据就算旧了,pdflush进程被唤醒后,将会把“旧”的数据写入磁盘。
  • 减少此值意味着脏页会更快变“旧”,并被pdflush进程写入磁盘,从而限制页高速缓存的大小。

vm.swappiness (RHEL 5 and 6:默认值 = 60, RHEL 7:默认值 = 30)

  • 此参数控制内核是否更趋向于交换非活动内存页页至交换分区(此值越高,代表非活动内存页越可能被交换至交换分区)。
  • 减少此值使内核更倾向于保持非活动内存页在物理内存中,从而释放页高速缓存中的页, 从而限制页高速缓存的大小。
  1. 不需要重启系统,来使修改后的参数生效。
  2. 修改上述参数可能对系统产生明显的影响,可能提高运行效率也可能降低运行效率。所以建议适当调整上述参数,并观察是否会对系统造成不良影响。

当内存利用率达到特定百分比值时,如何清除缓冲区/页面缓存(磁盘缓存)?将适当的值写入文件/proc/sys/vm/drop_caches会导致内核从内存中删除干净的缓存、dentry和inode,从而使内存变为空闲。

To free pagecache:
#sync
#echo 1 > /proc/sys/vm/drop_caches
To free dentries and inodes:
#sync
# echo 2 > /proc/sys/vm/drop_caches
To free pagecache, dentries and inodes:
#sync
#echo 3 > /proc/sys/vm/drop_caches

对于对这些值(vm.dirty_background_ratio、vm.dirty_ratio 等)的修改可能会影响系统行为和性能的显著变化(无论是积极的还是消极的)。强烈建议您首先稍微修改它们,并彻底测试每个更改,以确保它们不会对您的环境产生任何负面影响

参考《https://access.redhat.com/solutions/146673》

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言