pagecache的测试和理解

1. 可能要用到的指令

1. sysctl -a查看系统的一些配置,查看脏页的相关配置
[root@node01 ~]# sysctl -a | grep dirty
vm.dirty_background_ratio = 10
vm.dirty_background_bytes = 0
vm.dirty_ratio = 20
vm.dirty_bytes = 0
vm.dirty_writeback_centisecs = 500
vm.dirty_expire_centisecs = 3000
2. 修改相关配置项
[root@node01 ~]# vi /etc/sysctl.conf 

可以在文件末尾添加以下配置

  1. pagecache占用 可用内存 的阈值(后台) ,达到该值后(这里是占用可用内存的10%),触发内核写磁盘或者LRU,不会阻塞程序
vm.dirty_background_ratio = 10
  1. pagecache占用 可用内存 的阈值(前台),程序向内核写数据,当pagecache达到了可用内存的该阈值,会阻塞程序的写数据,触发内核写磁盘或者LRU
vm.dirty_ratio = 20
  1. 设置多久(百分之一秒)写回磁盘
vm.dirty_writeback_centisecs = 500
  1. 设置多久丢弃脏页
vm.dirty_expire_centisecs = 3000
3. pcstat

一个go语言写的工具,用来查看文件的缓存状态,自己去下载,然后放到/user/bin中使用就行
https://blog.51cto.com/liuzhengwei521/2360734

2. 现象

  1. 程序写数据到磁盘,首先会写到内核维护的pagecache中,一个pagecache大小是4k,pagecache被写了之后会变成dirty
  2. pagecache当达到占用可用内存的阈值,才会被写回磁盘
  3. 被写回磁盘的pagecache就不是dirty的了,将来可能会被LRU丢掉
  4. 如果异常断电,没有被写回磁盘的pagecache里的数据会丢失

3. 总结

  1. pagecache本身是用来优化IO性能的,但是异常断电时会丢数据
  2. pagecache对应于磁盘的某个区域,如果进程读文件发现内存里没有对应pagecache,就会造成缺页,内核就会从磁盘读数据到pagecache,之后进程继续读
  3. 在redis等缓存的设置里需要注意!(进程缓存,内核缓存,硬件缓存都可能丢数据)
  4. OS没有绝对的数据可靠性,设计pagecache是为了减少硬件IO调用,优先使用内存,提速。
    如果想要数据可靠性,可以调成最慢的模式————一个字符一个字符直接写磁盘,但是这样会造成性能损耗(单点问题),不现实,所以最终出现了主从复制、主备
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值