Я использую Raspberry PI с Ubuntu 16.04.1 LTS (GNU/Linux 4.4.0-1042-raspi2 armv7l) и когда я, например. Посмотрите видео через Samba, оно кэшируется и заполняет мою память кэшированными данными.
Это будет выглядеть так:
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 увидит эту часть ОЗУ как использованную, но доступную. Поэтому, когда это действительно понадобится другому процессу, оно будет доступно.
Но когда кэш достигнет предела моей оперативной памяти, произойдет следующее:
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
PS: я знаю, что я не должен использовать Swap на RPI с флешкой, это был временный тест для этой проблемы, который не помог.