Linux 缓存无法完全清除,几天后就会填满整个 RAM

Linux 缓存无法完全清除,几天后就会填满整个 RAM

我使用笔记本电脑工作,因此每天只暂停到 RAM,而不是关机。这样我就不必每天重新启动每个应用程序。

经过几天的“运行时间”后,我看到缓存已满,但我无法完全清除它。这会导致交换使用,然后导致 OOM。

# echo 3 > /proc/sys/vm/drop_caches; free -wht
              total        used        free      shared     buffers       cache   available
Mem:           23Gi       2.2Gi        15Gi       4.7Gi       0.0Ki       5.2Gi        15Gi
Swap:         2.0Gi          0B       2.0Gi
Total:         25Gi       2.2Gi        17Gi
# free -wht
              total        used        free      shared     buffers       cache   available
Mem:           23Gi       4.4Gi       457Mi       9.1Gi       3.5Gi        14Gi       9.2Gi
Swap:         2.0Gi       0.0Ki       2.0Gi
Total:         25Gi       4.4Gi       2.4Gi
# echo 3 > /proc/sys/vm/drop_caches; free -wht
              total        used        free      shared     buffers       cache   available
Mem:           23Gi       4.3Gi       9.0Gi       9.0Gi       0.0Ki       9.8Gi       9.4Gi
Swap:         2.0Gi       0.0Ki       2.0Gi
Total:         25Gi       4.3Gi        11Gi
# echo 3 > /proc/sys/vm/drop_caches; free -wht
              total        used        free      shared     buffers       cache   available
Mem:           23Gi       4.3Gi       9.0Gi       9.0Gi       0.0Ki       9.8Gi       9.4Gi
Swap:         2.0Gi       0.0Ki       2.0Gi
Total:         25Gi       4.3Gi        11Gi
# uptime
 10:57:09  up 3 days 19:26,  5 users,  load average: 0.89, 1.94, 1.69
# uname -a
Linux xxxxx-00164 5.3.18-150300.59.76-preempt #1 SMP PREEMPT Thu Jun 16 04:23:47 UTC 2022 (2cc2ade) x86_64 x86_64 x86_64 GNU/Linux
# 

我还不知道如何检查缓存中卡住了哪些应用程序或文件。我假设 3 > drop_caches 删除全部文件缓存的条目。但随着我的笔记本电脑运行时间增加,删除缓存操作每次都会释放更少的资源。上面的输出跨越约 8 小时。尽管我尝试在 1 秒内两次清除缓存(最后两个 echo 命令),但缓存中剩余的内容在可用中丢失了

如何分析这样的行为?缓存中还剩下什么?

非常感谢!斯特凡·K.

答案1

经过几天的“运行时间”后,我看到缓存已满,但我无法完全清除它。这会导致交换使用,然后导致 OOM。

我认为你正在寻找错误的问题。 drop_caches 命令无法删除正在使用的任何内容 - 这就是它不会变为零的原因。但这通常不是问题。您可能可以在这个网站上找到十几个答案(例如如何清空 Linux 系统上的缓冲区和缓存?)告诉你这通常毫无意义。

但话虽如此,我认为这些都不能解释为什么echo 3 > /proc/sys/vm/drop_caches不能使cached数字直接为零。我知道至少有两件事可能会产生影响:文件tmpfs(包括仍然打开但可能被删除的文件(请参阅Serverfault 上的这个答案)和zram(参见zramctl命令)。可能还有其他一些。

基本问题不是缓存——有什么东西正在使用你的内存真正的

相关内容