如何更改操作系统文件缓存刷新策略?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何更改操作系统文件缓存刷新策略?相关的知识,希望对你有一定的参考价值。
环境说明以下针对linux操作系统,在centos/RHEL 6、centos/RHEL 7上测试有效。
相关参数
和文件系统写缓存策略相关的主要是下面两个参数,其它相关参考可自行谷歌:
/proc/sys/vm/dirty_ratio
文件系统写缓冲区的大小,单位是百分比,表示系统内存的百分比,表示当写缓冲使用到系统内存多少的时候,开始向磁盘写出数据。增大之会使用更多系统内存用于磁盘写缓冲,也可以极大提高系统的写性能。但是,当需要持续、恒定的写入时,应该降低其数值。
/proc/sys/vm/dirty_background_ratio
控制 pdflush 进程在何时刷新磁盘。单位是百分比,表示系统内存的百分比,意思是当写缓冲使用到系统内存多少的时候, pdflush 开始向磁盘写出数据。增大之会使用更多系统内存用于磁盘写缓冲,也可以极大提高系统的写性能。但是,当需要持续、恒定的写入场合时,应该降低其数值。
对比说明
vm.dirty_background_ratio: 这个参数指定了当文件系统缓存脏页数量达到系统内存百分之多少时(如5%)就会触发pdflush/flush/kdmflush等后台回写进程运行,将一定缓存的脏页异步地刷入外存;
vm.dirty_ratio: 而这个参数则指定了当文件系统缓存脏页数量达到系统内存百分之多少时(如10%),系统不得不开始处理缓存脏页(因为此时脏页数量已经比较多,为了避免数据丢失需要将一定脏页刷入外存);在此过程中很多应用进程可能会因为系统转而处理文件IO而阻塞。
正常都是先达到vm.dirty_background_ratio的条件然后触发flush进程进行异步的回写操作,但是这一过程中应用进程仍然可以进行写操作,如果多个应用进程写入的量大于flush进程刷出的量那自然会达到vm.dirty_ratio这个参数所设定的坎,此时操作系统会转入同步地处理脏页的过程,阻塞应用进程。
也就是说,正常vm.dirty_background_ratio < vm.dirty_ratio才有意义。
在经常有大量写入操作的系统中,应该分别调低这两个参数的值,加快数据刷盘的频率,从而避免因系统同步处理文件IO而导致相关进程处于D状态。
参数修改方法
临时生效方法(重启后失效):
echo 5 >/proc/sys/vm/dirty_background_ratio
echo 10 >/proc/sys/vm/dirty_ratio
或者
sysctl -w vm.dirty_background_ratio=5
sysctl -w vm.dirty_ratio=10
永久生效方法:
echo "vm.dirty_background_ratio = 5" >> /etc/sysctl.conf
echo "vm.dirty_ratio = 10" >> /etc/sysctl.conf
sysctl -p /etc/sysctl.conf
参考:
http://blog.sina.com.cn/s/blog_448574810101k1va.html
以上是关于如何更改操作系统文件缓存刷新策略?的主要内容,如果未能解决你的问题,请参考以下文章
当另一个片段中的数据发生更改时,如何刷新一个片段中的 RecyclerView
当sqlite android片段中的数据更改或删除时如何刷新recyclerview?