我正在运行带有 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
答案2
我注意到我的桌面系统上的普通 Ubuntu 也存在同样的问题。Ubuntu 16.04 似乎专门阻止了缓存,并且无法通过 释放它echo 3 | sudo tee /proc/sys/vm/drop_caches
。
您是否尝试过切换到其他版本?根据我的经验,缓存问题会好一些,例如在 Lubuntu 中,您也可以尝试 Xubuntu。它们通常占用较少的内存。
一般来说,对于 Raspi 这样的低内存环境,你需要使用特殊软件,例如像素桌面。