Proxmox 8.0, 64 ГБ RAM. Ночью OOM killer вынес мою главную VM с базой. Смотрю — ARC раздулся до 31 ГБ. Я думал ARC сам отдаёт память когда надо, разве нет?
Должен отдавать, но на практике сжимается слишком поздно и медленно. Когда VM резко запросила память — ARC не успел освободиться, ядро решило что проще кого-то убить. Классические грабли.
По дефолту ARC берёт до 50% RAM на установках до PVE 8.1. Ставь жёсткий лимит руками: zfs_arc_max в /etc/modprobe.d/zfs.conf, у тебя на 64 гига я бы дал ARC гигов 16.
Базовая прикидка: 2 ГБ + 1 ГБ на каждый ТБ пула. У тебя сколько данных на пуле? Но если RAM нужна под VM — режь смело, ARC это всего лишь кэш чтения, не потеряешь данные, только чуть просядет скорость.
Да, update-initramfs -u -k all и ребут, иначе модуль подхватит старое значение. Можно и на лету через /sys/module/zfs/parameters/zfs_arc_max, но после ребута слетит.
Народ, на PVE 8.1+ для свежих установок дефолт уже 10% RAM с потолком 16 ГБ. Так что апгрейднутые с древних версий ловят 50%, а новички удивляются о чём вообще тред.
Важный нюанс: ARC и так не считается ядром как 'свободная' память корректно во всех случаях. Плюс если у тебя KSM и баллонинг на VM — там вообще цирк начинается с учётом памяти.
Лимитить ARC до 16 на 64 гигах — кощунство, у тебя кэш чтения будет постоянно промахиваться. Лучше разберись почему VM так резко скакнула по памяти. У тебя там точно не своп внутри гостя отвалился?