我知道内核使用内存进行缓存,但该内存可按需供用户应用程序使用。在声称内存“丢失”时,我指的是 的输出中的“可用”内存free
,其中考虑到了这一点
在我看来,如果你杀死所有启动的进程,你应该或多或少地恢复到你拥有的可用内存。但情况似乎并非如此。
这是登录到 X 后立即的输出free -k
,使用极简主义的 WM 和几个 shell 之类的东西:
重启后:
total used free shared buff/cache available
Mem: 8144232 373664 6945832 1644 824736 7514692
available
大小为 7.5MiB,一切都很好。
使用计算机几周后,内存available
显着下降,即使我杀死了所有启动的应用程序,内存也仍低于启动时的水平。如果我杀死我能找到的所有应用程序,我可能会获得最多大约 5GiB 的“可用”空间。
然后,如果我重新启动显示管理器并再次登录,我会得到:
total used free shared buff/cache available
Mem: 8144344 577280 5547936 982600 2019128 6279136
Swap: 0 0 0
这确实比简单地杀死应用程序释放更多的内存,但需要我再次重新打开所有内容。此外,这并没有让我接近新启动的 7.5GiB。我发现共享内存使用量占其中的大部分,但由于我已经关闭了每个用户进程,我不明白为什么它如此高。
我想知道是什么原因导致这种行为,以及是否有解决方案,最好是不需要我重新启动计算机或重新启动 X 的解决方案。
答案1
free 显示“共享”的高值,并且交换被禁用。如果 /tmp 作为 tmpfs 挂载,则其中的任何文件实际上都存储在共享内存中,并且没有交换,系统无法交换它们以释放内存。
检查df
并查看 /tmp 中使用了多少空间,这可能解释了您在应用程序内存和总系统内存之间看到的差异。