
Есть ли способ прозрачно освободить или предотвратить использование памяти гостевой ОС qemu-kvm?
Сценарий А:
Гость использует 8 ГБ оперативной памяти в часы пик, ночью объем использования возвращается к 4 ГБ, но гость по-прежнему требует от хоста 8 ГБ оперативной памяти.
Сценарий Б:
Гость использует 2 ГБ ОЗУ, но имеет 6 ГБ ОЗУ в кэше страниц. Гость требует 8 ГБ ОЗУ от хоста, но до 6 ГБ из них может быть ОЗУ, которое может иметь большее значение в другой гостевой системе.
Мои первые мысли по поводу эффекта раздувания были такими: гость не «увидит» эффекта раздувания, но при отправке «balloon 2048» память внутри гостя фактически уменьшается примерно до 2 ГБ.
решение1
Вы можете включитьавтоматическое надуваниев гостевой системе libvirt, отредактировав XML:
<memballoon model='virtio'>
Устройство виртуальной памяти занимаетпараметр autodeflate
, что по умолчанию равно off
. Установите его на , on
чтобы включить автоматическое наполнение.
<memballoon model='virtio' autodeflate='on'>
Обратите внимание, что в virt-manager нет графического интерфейса для включения или отключения этого параметра.
Если вы вызываете qemu вручную (пожалуйста, сохраните рассудок и не делайте этого), то добавьте ,automatic=true
в balloon-устройство, например -device virtio-balloon,automatic=true
.
Для авторазмещения требуется qemu/kvm 1.3.1 или более поздняя версия.
Обратите внимание, что это, скорее всего, не решит всех проблем с нехваткой памяти; лучше всего просто иметь достаточно оперативной памяти для запуска всех ваших виртуальных машин.
решение2
cron это на виртуальной машине и/или хосте виртуальной машины каждую ночь после часов пик:
синхронизация; эхо 1 > /proc/sys/vm/drop_caches
он удаляет кэш файловой системы и возвращает его в качестве доступной памяти системе, после чего KVM/гипервизор может увидеть его как свободную память и найти для него другое применение.
также очень хорошо работает с системами Docker