linux的cache轮训,Linux cache参数调优

缓存机制(cache)是保证Linux环境下对硬盘/flash操作效率的有效方式。cache建立在内存中,它缓存了硬盘/flash的数据,当脏数据到达一定水限时,再异步地将数据刷入硬盘。这可以加速进程的文件系统访问操作。但是也有风险,当数据未写入硬盘前设备重启,存在数据丢失的风险。

如果缓存相关参数设置得不好,对系统的运行反而会有不良的影响。如果cache过大,当需要把cache中的巨量数据刷入硬盘时,会让系统显得卡顿,甚至无法调度线程。

Linux提供的接口,以支持修改cache容量。

参数说明

cache中脏数据相关参数

sysctl -a | grep dirty可以看到一组相关的内核参数

$ sysctl -a | grep dirty

vm.dirty_background_bytes = 0

vm.dirty_background_ratio = 5

vm.dirty_bytes = 0

vm.dirty_expire_centisecs = 600

vm.dirty_ratio = 10

vm.dirty_writeback_centisecs = 100

vm.dirty_background_bytes:脏数据量达到此门限后,系统会开始把脏数据写入外存。此时脏数据可能仍然继续写入内存。

vm.dirty_ratio:脏数据量达到此门限后,系统会阻塞式地将脏数据写入外存,新的数据将被阻塞,无法写入cache。

vm.dirty_background_bytes与vm.dirty_bytes:与vm.dirty_background_bytes/vm.dirty_ratio类似,差异仅仅是门限的计数单位,不是内存总量的百分比,而是bytes。注意_ratio与_bytes,有且仅有一个组能生效,如果一组被设置了非0值,另一组就应该被置0。

vm.dirty_writeback_centisecs:表示间隔多长时间,系统去检查一次cache中的数据量是否超过门限值,以百分之一秒为单位。

vm.dirty_expire_centisecs:表示数据在cache中允许被缓存多长时间。以百分之一秒为单位。

drop cache相关参数与操作

使用top命令,可以查看当前系统中cache的大小。

# top

top - 16:50:19 up 4 days, 7:00, 22 users, load average: 25.06, 24.12, 23.14

Tasks: 493 total, 7 running, 486 sleeping, 0 stopped, 0 zombie

%Cpu(s): 37.1 us, 18.9 sy, 0.0 ni, 42.3 id, 0.0 wa, 0.0 hi, 1.7 si, 0.0 st

KiB Mem : 65622752 total, 30293032 free, 29879144 used, 5450576 buff/cache

KiB Swap: 0 total, 0 free, 0 used. 31415264 avail Mem

使用echo 3 > /proc/sys/vm/drop_caches可以手动清理cache。但这并不是一个好主意。cache有它存在的必要。假设一台网页服务器,在drop_cache之后,所有用户访问的数据都将从硬盘中读出,这会显著地影响用户访问网站的体验。

如果发现cache确实过大,我们应该尽量使用系统提供的参数来调优,不采用主动drop_cache的方式。

vm.vfs_cache_pressure:表示系统清理cache的“努力程度”。默认值为100。越大则表示内核会越频繁地回收cache。

参数建议

在一台内存为64G,硬盘读写量长期保持在500KB/s的服务器上,在未调优前,经常发生因系统回收cache导致的系统挂起。因此,我们考虑修改参数,提高flush dirty和cache回收的频率,避免脏数据与cache累积过多,一次性回收导致的系统挂起无响应。

以下参数作参考:

vm.dirty_background_bytes = 0

vm.dirty_background_ratio = 5

vm.dirty_bytes = 0

vm.dirty_expire_centisecs = 600

vm.dirty_ratio = 10

vm.dirty_writeback_centisecs = 100

vm.vfs_cache_pressure = 500

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值