linux内核缓冲区设置,(转)限制Linux中 buffer/cache (缓冲区缓存)的大小

限制Linux中缓冲区缓存的大小

有没有办法告诉Linux内核只使用一定比例的内存用于缓冲区缓存?我知道/proc/sys/vm/drop_caches可用于临时清除缓存,但是有任何永久设置可以防止它增长到超过例如50%的主存?

我想要这样做的原因是,我有一台运行Ceph OSD的服务器,它不断地从磁盘提供数据,并设法在几个小时内将整个物理内存用作缓冲区缓存。

同时,我需要运行将分配大量(几十GB)物理内存的应用程序。

与流行的看法相反(参见几乎所有关于缓冲区缓存的问题的建议),通过丢弃干净的缓存条目来自动释放内存并不瞬间:

启动我的应用程序可能需要一分钟当缓冲区缓存已满(*)时,

而清除缓存后(使用echo 3 > /proc/sys/vm/drop_caches),相同的应用程序几乎立即启动。

(*)根据Vtune在一个名为pageblock_pfn_to_page的函数中,在启动时间的这一分钟内,应用程序会出现新的内存错误但在内核中花费100%的时间。这个函数似乎与查找大页面所需的内存压缩有关,这让我相信实际上碎片是问题所在。

作者:Wim

最佳答案

如果您不想要绝对限制但只是迫使内核更快地清除缓冲区,那么您应该查看vm.vfs_cache_pressure

此变量控制内核回收用于缓存VFS缓存的内存的趋势,而不是pagecache和swap。增加此值会增加回收VFS缓存的速率。

范围从0到200.将其移向200以获得更高的压力。默认值设置为100.您还可以使用slabtop命令分析内存使用情况。在您的情况下,dentry和*_inode_cache值必须很高。

如果你想要一个绝对限制,你应该查找cgroups。将Ceph OSD服务器放在cgroup中,并通过为cgroup设置memory.limit_in_bytes参数来限制它可以使用的最大内存。

memory.memsw.limit_in_bytes设置内存和交换使用总和的最大金额。如果未指定单位,则将该值解释为字节。但是,可以使用后缀来表示更大的单位 – k或K表示千字节,m或M表示兆字节,g或G表示千兆字节。

参考文献:

[1] – GlusterFS Linux内核调优

[2] – RHEL 6资源管理指南

作者:NOLFXceptMe

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值