ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

缓存中有内存的Linux内核模块OOM

2019-07-03 23:37:54  阅读:268  来源: 互联网

标签:caching linux out-of-memory kernel


嵌入式系统,无交换,内核v2.6.36,内存压缩启用.

在大量使用情况下,所有RAM都被绑定在缓存中.缓存使用大约70M的内存.当用户空间进程分配内存时没问题,缓存就会放弃.

但是有一个第三方设备驱动程序似乎试图分配一个物理的5阶页面,并与OOM失败.快速浏览一下buddyinfo确认了这一点……没有第5个订单页面可用.但是一旦我删除缓存,就会有足够的可用内容,而设备驱动程序不再是OOM.

所以在我看来,虚拟内存分配会触发缓存丢弃,但物理内存分配不会?这没有任何意义,因为当内存被绑定在缓存中时内核模块很可能是OOM,并且这种行为似乎比没有缓存的慢速磁盘访问更有害.

是否有一个调整参数来解决这个问题?

谢谢!

解决方法:

所以这就是发生了什么.我仍然不知道为什么高缓存使用导致内核模块到OOM.问题在于我们无法访问的第三方代码,因此谁知道他们在做什么.

我想有人可以争辩,如果这是设计,非关键磁盘缓存可以占用所有可用的空闲内存,并导致内核模块到OOM,那么恕我直言,也许磁盘缓存应该为内核留下一些东西.

我决定改为限制缓存,因此总有一些“真正免费”的内存留给内核使用,而不依赖于缓存中绑定的“那种免费”内存.

我找到了一个内核补丁,它将添加/ proc / sys / vm / pagecache_ratio,以便您可以设置磁盘缓存可以占用多少内存.但是由于某种原因,它从未被整合到内核中(我认为这是一个好主意,特别是如果磁盘缓存可能导致内核OOM).但我不想因为可维护性和面向未来的原因而混淆内核补丁.如果有人只是做了一次性的交易,并且不介意补丁,这里是链接:
http://lwn.net/Articles/218890/

我的解决方案是我重新编译了内核并启用了cgroups,我正在使用它来限制一组负责大量磁盘访问的进程(因此运行缓存)的内存使用量.调整配置后,似乎工作正常.我将让我的设置在周末进行压力测试,看看OOM是否仍然存在.

编辑

我想我找到了自己的答案. / proc / sys / vm /中有VM调整参数.与此问题相关的可调设置为:min_free_kbytes,lowmem_reserve_ratio和extfrag_threshold.

标签:caching,linux,out-of-memory,kernel
来源: https://codeday.me/bug/20190703/1371649.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有