简要问题描述:英特尔酷睿 2 Q6600 上的 64 位 Gentoo 报告在重启后大约 8GB 总内存中使用了 3GB。该内存既不被任何进程占用,也不被缓冲区/缓存使用。
上下文:emerge
在尝试从源代码构建八度音程时,OOM 终止了进程后,我首先注意到了这种行为。当系统再次响应时,仍有大约 3GB 的据称已用内存未被任何进程使用。(请注意,我不能肯定地说这真的是在开始时 - 也许我之前没有注意到。)
我尝试重新启动,因为我不熟悉 OOM 可能的问题,但据报道再次使用了内存。
然后我尝试了 Memcheck86+,它在 3246.3MB 上报告了一个“失败地址”错误(测试重复了 5 次)。我降低了 RAM 频率,错误消失了(测试重复 3 次)。
然而,在我的 Gentoo 上,3GB 一直被报告为已使用,没有明显的解释(请参阅下面的诊断报告)。
我还尝试了一个实时发行版(Parted Magic),它显然表现正常(启动后大约有数百个已用内存)。
关于可能的原因甚至解决方案的任何建议?
编辑: 我现在能够克服这个问题,但仍然无法解释。我描述了我到目前为止跟踪的内容:
启动iptables
结果为 3GB 使用量,而 dmesg 报告:
nf_conntrack:回退到 vmalloc
后续停止iptables
不会恢复进程,内存仍然使用。
然后我更改了内核配置,使其nf_conntrack
不再是内置的,而是作为模块加载的。重新iptables
启动后,在没有falling back to vmalloc
消息的情况下启动,也不会消耗 3GB。
我不知道,这怎么解释。也许某些内核开发人员可以帮助解释,究竟是什么导致了这种行为?
相关报道: