我知道,这是关于同一主题的第 1000 个问题。我花了几天时间阅读了很多帖子,但仍然找不到解决我奇怪情况的答案。
当我的机器上有 16GB RAM 时,一切都很好。我确实升级到了 32GB,内核确实开始吃掉所有它能使用的 RAM(~25GB),没有为应用程序留下任何空间。free
并将atop
内存使用情况报告为缓冲区/高速缓存。
清理缓存可以恢复几GB,但只能恢复几分钟。我确实尝试关闭除 2 个 SSH 会话之外的所有应用程序。相同的结果。运行的应用程序少于 10 个时,我还有大约 20GB 的空间缓冲区/高速缓存被内核吃掉。摆脱它的唯一方法是重新启动。
我正在运行带有内核 4.4.0-79-generic 的 Linux Mint 18。作为信息,我的系统启动时使用的 RAM 不足 2GB(后台没有运行饥饿的应用程序)。
有人知道如何识别泄漏吗?
[解决了]- 原因已确定,这是因为引导图(我对此的评论在我自己的回答中)
答案1
这不是问题 - Linux 的工作方式是为了提高性能,而不会影响任何需要 RAM 的应用程序。
答案2
我确实重新安装了 Mint 18.1,问题确实消失了。内存使用量保持在 < 3GB,而不是之前的 25~30GB。
我对发生的事情的理解,如果这可以帮助其他人,那就是内核中的内存泄漏。我怀疑内核本身正在泄漏,但驱动程序可能是原因。
我发现了一个关于内核内存泄漏的有趣文档:https://01.org/linuxgraphics/gfx-docs/drm/dev-tools/kmemleak.html。我不确定哪些版本的内核可以启用它,但 Ubuntu 上的常规内核 4.10 却不能(必须重新编译启用选项的内核)。
遵循这个想法,我终于找到原因了。几周前我安装了引导图。它不显示为系统应用程序。我确实重新安装了它,结果很简单。随着进程数量的启动,内存使用量持续缓慢增长。
这里描述了同样的问题:https://forums.linuxmint.com/viewtopic.php?t=226774
答案3
清理缓存可以恢复几GB,但只能恢复几分钟。我确实尝试关闭除 2 个 SSH 会话之外的所有应用程序。相同的结果。
正如您所描述的,听起来确实有一些东西需要识别,例如后台活动。在第二种情况下,令人惊讶的是您无法清理缓存并恢复到桌面会话的“已用 RAM 少于 2GB”左右。
请记住,您不能从缓存中删除脏页,这会导致数据丢失。 (它们应该通过写回“清理”,在 vm.dirty_writeback_centisecs 之后启动,默认 3 秒)。为了完整起见,请sync
在删除缓存之前使用。
一般来说,页面缓存应该由应用程序读取和写入来填充。如果你是一位大师atop
(我不是),也许它会启发你。否则 -iotop
将显示每个进程的带宽。尽最大努力清除缓存,等待桌面恢复,然后观看 iotop 中显示的内容。
iotop -b
提供批处理模式,因此您之后不会丢失输出。
例如,如果您配置了此时运行的备份,您可以看到这些统计信息。 (一些备份工具故意尝试避免使用页面缓存,担心填满页面缓存并逐出 GUI 应用程序等)。