Почему память забивается buff/cache и oomkiller убивает виртуалки?
Суть такая, есть сервер с таким конфигом 2хE5-2630v3/8x4Gb RDIMM DDR4/LSI 9261-8i/8x4Tb SAS (диски выдернуты из полки HP MSA 2040 и брендированы HP), стоит ОС Ubuntu Server 16.04, массив разбит на 2 раздела, 2Tb / и 20Tb /home под архив, оба раздела ext4.
Собран массив raid 50 из 8 дисков, деградировавших дисков контроллер не показывает, BBU нет но включен кеш контроллера. Если погасить все сервисы и протестировать dd то в линейной записи выдаёт ~700мб/с, в чтении 1.4гб/с.
На севере крутится flussonic с архивом на ~300 потоков, нода кластера MariaDB (~3k rqps) с репликой на резервный сервер, нода GlusterFS (2 тома, пока без реплики, в одном две мелких виртуалки для миграции на другой сервер, во втором слои картографии для GeoServer'а) и несколько других виртуалок в KVM.
В последнее время на этом сервере OOM Killer стал убивать нужную виртуалку, т.к. она больше всего занимает памяти, при этом free показывает used только 16гб памяти, остальное забивается buff/cache. Т.к нужная виртуалка интенсивно грузит диск - думал дело в кешировании диска, отключил его - всё-равно через полчаса-час buff/cache занимает 10гб. Пока закинул в крон sync && echo 1 > /proc/sys/vm/drop_caches каждые 15 минут, что вылилось в загрузку массива на 100% во время выполнения задачи.
Пробовал тюнить vm.swappiness=10, vm.vfs_cache_pressure=1000, но не помогает, нагрузка на массив в iostat держится на уровне 30%, память всё-равно так-же быстро уходит. Ставил vm.min_free_kbytes на 8гб, в итоге buff/cache заняло 8гб и сервер полностью завис.
В какую сторону ещё можно покопать? Или тут я упираюсь в производительность дискового массива и остаётся только мигрировать часть сервисов на другие сервера?
Это я уже проштудировал раз 10 и не нашёл ответа на свой вопрос. То что оно использует раму для кеширования это понятно, почему оно не освобождает кеш, когда нужна память для приложений? зачем ему 10-17гб кеша? как оптимизировать это? почему срабатывает оомкиллер вместо частичного/полного кеша?