当 RAM 被缓存填满时,RPI 上的 Ubuntu 会开始终止进程

当 RAM 被缓存填满时,RPI 上的 Ubuntu 会开始终止进程

我正在运行带有 Ubuntu 16.04.1 LTS(GNU/Linux 4.4.0-1042-raspi2 armv7l)的 Raspberry PI,当我通过 Samba 观看视频时,它会被缓存并用缓存数据填满我的 RAM。

它将会像这样:

user@rpi:~$ free -h -m
              total        used        free      shared  buff/cache   available
Mem:           920M         57M        133M        980K        729M        828M
Swap:          1.8G         29M        1.8G

据我所知,这应该不是一件坏事,因为 Ubuntu 会认为这部分 RAM 已使用但可用。因此,当另一个进程确实需要它时,它将可用。

但是当缓存达到我的 RAM 限制时,将会发生以下情况:

Feb  8 19:08:36 rpi kernel: [160789.617128] Out of memory: Kill process 29171 (myprocess) score 40 or sacrifice child
Feb  8 19:06:08 rpi kernel: [160641.803753] Killed process 29072 (myprocess) total-vm:170312kB, anon-rss:63196kB, file-rss:43628kB

有人能向我解释为什么会发生这种情况以及如何避免这种情况吗?目前我唯一的临时解决方案是手动清除缓存:

sync && echo 3 > /proc/sys/vm/drop_caches

附言:我知道我不应该在带有闪存驱动器的 RPI 上使用 Swap,这只是针对此问题的临时测试,没有帮助。

答案1

您有足够的可用 RAM。缓存不会妨碍Linux 将根据需要放弃它。你最有可能看到这个错误,尝试将内核降级到早期版本。

答案2

我注意到我的桌面系统上的普通 Ubuntu 也存在同样的问题。Ubuntu 16.04 似乎专门阻止了缓存,并且无法通过 释放它echo 3 | sudo tee /proc/sys/vm/drop_caches

您是否尝试过切换到其他版本?根据我的经验,缓存问题会好一些,例如在 Lubuntu 中,您也可以尝试 Xubuntu。它们通常占用较少的内存。

一般来说,对于 Raspi 这样的低内存环境,你需要使用特殊软件,例如像素桌面

相关内容