Linux page cache与buffer cache优化

网友投稿 2229 2022-10-18

Linux page cache与buffer cache优化

Linux page cache与buffer cache优化

page cache的优化以及如何回收cache

page cache的优化 要优化page cache,需要关注两个操作系统参数:

当发生一个读操作,首先去pagecache里面去找,找到了就直接返回了,没有找到就去磁盘读取文件,然后再写入这个pagecache,然后再读取,最终返回需要的数据

当写入只是将数据暂时存入pagecache,并且置为dirty标志,写入pagecache的数据会被定期,批量的保存在文件系统上面,这样就减少了对磁盘的操作次数,减少系统的开销。

vm.dirty_background_ratio:这个参数指定了当文件系统缓存脏页(Page Cache中的数据称为脏页数据)数量达到系统内存百分之多少时(默认10%)就会触发pdflush/flush/kdmflush等后台回写进程运行,将一定缓存的脏页异步地刷入磁盘。增减这个值是最主要的调优手段。vm.dirty_ratio:这个参数则指定了当文件系统缓存脏页数量达到系统内存百分之多少时(默认20%),系统不得不开始处理缓存脏页(因为此时脏页数量已经比较多,为了避免数据丢失需要将一定脏页刷入磁盘);在此过程中很多应用进程可能会因为系统刷新内存数据到磁盘而发生IO阻塞。

vm.dirty_background_ratio 这个是将脏数据刷到内存的标准值

vm.dirty_ratio 这个是最大值

最好不要让vm.dirty_background_ratio达到vm.dirty_ratio值,那么刷新的过程当中会出现阻塞。

这两个系统参数对应的文件为:

vm.dirty_background_ratio:/proc/sys/vm/dirty_background_ratio vm.dirty_ratio:/proc/sys/vm/dirty_ratio

作为通用优化设置,建议将vm.dirty_background_ratio设置为5%,vm.dirty_ratio设置为10%。具体的设置根据不同环境,需要进行测试、再测试。(参考值,设置为这两个值效果还是不错的)

page cache的优化以及如何回收cache

如何回收cache linux提供了几个参数,用来释放cache,具体如下: 要释放page cache,可执行如下命令:     echo 1 >  /proc/sys/vm/drop_caches

要释放文件节点(inodes)缓存和目录项缓存(dentries),大部分缓存数据都是用的page cache,执行如下命令:(释放的是大部分的pagecache,不是所有的)     echo 2 >  /proc/sys/vm/drop_caches

要释放page cache、dentries和inodes缓存,执行如下命令:(释放了所有的pagecache,目录项缓存以及文件节点缓存)     echo 3 >  /proc/sys/vm/drop_caches

执行上面这些的时候,最好执行一下sync,也就是将脏页数据刷到硬盘上面去,避免缓存当中的数据丢失。

关于swap的使用与优化

swap交换分区的使用 创建交换空间所需的交换文件是一个普通的文件,但是,创建交换文件与创建普通文件不同,必须通过dd命令来完成,同时这个文件必须位于本地硬盘上。

[root@localhost ~]# dd if=/dev/zero of=/data/swapfile bs=1024 count=65536

要使用swap,首先要激活swap,通过mkswap命令指定作为交换空间的设备或者文件:

[root@localhost ~]#mkswap /data/swapfile

最后,通过swapon命令激活swap:

[root@localhost ~]#/usr/sbin/swapon /data/swapfile

swap的优化 swappiness的值的大小对如何使用swap分区是有着很大的联系的。swappiness=0的时候表示最大限度使用物理内存,然后才是 swap空间,swappiness=100的时候表示积极的使用swap分区。

[root@slave034 ~]# cat /proc/sys/vm/swappiness 60

默认值为60,意思是说,系统的物理内存在使用到100-60=40%的时候,就可以开始使用交换分区了。此参数设置了使用交换分区的可能性大小。

在/etc/sysctl.conf文件中修改,加上如下内容: vm.swappiness=10 然后执行命令: sysctl  -p,永久生效。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Ansible 使用普通用户管理被控端
下一篇:Thrust pivotal- 构建 iOS 应用程序档案
相关文章

 发表评论

暂时没有评论,来抢沙发吧~