У меня уже около недели работает тестовый хост CentOS KVM с 3 гостями CentOS. Имеется 12 ГБ физической оперативной памяти, из которых около 7,5 ГБ фактически выделены виртуальным машинам. Эти виртуальные машины еще даже не используются, поскольку сервер все еще находится на стадии тестирования, но я заметил, что использование свопа увеличивалось в течение последних 24-48 часов. Теперь похоже, что он исчерпан.
Вот результат free
# free -m
total used free shared buffers cached
Mem: 11905 11749 155 0 81 4632
-/+ buffers/cache: 7035 4869
Swap: 2047 2047 0
Итак, как вы можете видеть, вся физическая память используется, но используется в качестве кэшированной памяти, что, по моему мнению, в целом нормально, так как она будет выпущена, если приложению это понадобится.
Я запустил сценарий оболочки, найденный в этот ответ в котором перечислены 3 qemu-kvm
процессы.
На сервере был выделен только логический том 2 ГБ для подкачки, и обычно мне нравится использовать физическую память размером до 8 ГБ.
Стоит ли расширять логический том подкачки или добавлять отдельный том подкачки?
Это обычное дело с KVM? Это не то, что я видел на других хостах KVM, поэтому есть ли какой-то конкретный параметр, который мне нужно настроить?
Любые другие комментарии / предложения?
Это нормально. Страницы, используемые бездействующими виртуальными машинами, будут заменены местами, а память будет использоваться для кеширования. Вы могли бы установить обмен до нуля, что может помешать подобному использованию свопа за счет производительности (меньший размер кеша).
Вот Red Hat рекомендация (со многими YMMV):
Пространство подкачки рассчитывается следующим образом:
Вычислите объем памяти, необходимый для суммы всех гостей - В этом примере: (50 гостей * 1 ГБ памяти на гостя) = 50 ГБ
Добавьте объем гостевой памяти к объему, необходимому для ОС хоста и для минимального пространства подкачки хоста - В этом примере: 50 ГБ гостевой памяти + 4 ГБ ОС хоста + 4 ГБ минимального свопа = 58 ГБ
Вычтите это количество из объема физической оперативной памяти, имеющейся в системе - в этом примере 58 ГБ - 32 ГБ = 26 ГБ.
Ответ - это количество пространства подкачки, которое необходимо выделить. В этом примере 26 ГБ
В этом примере не учитывается слияние одной страницы ядра (KSM), что уменьшает объем используемой памяти.
Здесь RH говорит об обмене 4G на хост, но Вот они рекомендуют для вас 12G * 0.5 = 6G.
Если вы новичок в KVM, я рекомендую прочитать IBM Лучшие практики для KVM документ.
По моему опыту нет, лишний своп назначать не стоит. Вы собираетесь использовать swap (HDD) в качестве RAM, а RAM в качестве кеша (ярлык для HDD) .... звучит в основном контрпродуктивно. Обычно в системе с 8 ГБ ОЗУ я назначаю подкачку 1-2 ГБ, обычно это остаток от схемы разделов рейда. Пример:
3x64 ГБ SSD (ОС / программное обеспечение Raid0) 2x1TB SATA (Data Raid1)
Я установил свой 1-й SSD на 1 ГБ при загрузке, оставив 2x1 ГБ потраченными впустую после того, как я сделаю идентичное разбиение на остальных дисках. Похоже на свопинг на Raid0, и обычно к нему все равно не обращаются.
Что касается KVM, я бы изучал отчеты об ошибках, а также устранял неполадки на отдельных гостевых машинах. Может ли там быть утечка памяти?