首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >限制Linux中缓冲区缓存的大小

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

Unix & Linux用户
提问于 2016-01-07 09:54:56
回答 5查看 84.1K关注 0票数 50

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

我之所以要这样做,是因为我有一个服务器运行Ceph,它不断地从磁盘中提供数据,并设法在几个小时内将整个物理内存作为缓冲区缓存使用。同时,我需要运行将分配大量物理内存(几个10s GB)的应用程序。与流行的观点相反(请参阅有关缓冲区缓存的几乎所有问题的建议),通过丢弃干净的缓存条目来自动释放内存并不是即时的:当缓冲区缓存已满(*)时启动我的应用程序可能需要一分钟的时间,而在清除缓存(使用echo 3 > /proc/sys/vm/drop_caches)之后,同一应用程序几乎立即启动。

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

EN

回答 5

Unix & Linux用户

回答已采纳

发布于 2016-01-13 03:18:37

如果您不想要一个绝对的限制,而只是对内核施加压力,让它更快地清除缓冲区,那么您应该看看vm.vfs_cache_pressure

这个变量控制内核回收用于缓存VFS缓存的内存的倾向,而不是分页缓存和交换。增加此值会增加VFS缓存的回收速率。

范围从0到200。为了更高的压力,把它移到200。默认设置为100。您还可以使用slabtop命令分析您的内存使用情况。在您的示例中,dentry*_inode_cache值必须很高。

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

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

参考文献:

1 - GlusterFS Linux内核调优

2 - RHEL 6资源管理指南

票数 24
EN

Unix & Linux用户

发布于 2016-01-13 00:35:24

我不知道A%,但是,你可以设定一个时间限制,这样在x分钟之后它就会掉下来。

航站楼第一名

代码语言:javascript
运行
复制
sync && echo 3 | sudo tee /proc/sys/vm/drop_caches

清除当前缓存。

让它成为一个cron-job按Alt-F2,键入gksudo gedit /etc/crontab,然后在底部附近添加这一行。

代码语言:javascript
运行
复制
 */15 *    * * *   root    sync && echo 3 > /proc/sys/vm/drop_caches

**每15分钟清洗一次。如果您真的想要将第一个参数更改为*或/5而不是/15,则可以将其设置为1或5分钟

若要查看空闲RAM,除缓存外:

代码语言:javascript
运行
复制
free -m | sed -n -e '3p' | grep -Po "\d+$"                          
票数 4
EN

Unix & Linux用户

发布于 2022-02-08 22:41:39

您还可以使用vm.min_free_kbytes (/proc/sys/vm/min_free_k)来防止Linux内核使用过多的内存进行缓冲(您需要尝试设置不同的值,以找出哪些值适合您的用例)。

票数 3
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/253816

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档