Можно ли создать файл подкачки для гостевой виртуальной машины Linux, управляемой Vagrant?

8

По моему Vagrantfileу меня определен следующий провайдер:

Выдержка из Vagrantfile:

config.vm.provider :virtualbox do |vb|
  vb.gui = false
  vb.customize ["modifyvm", :id, "--memory", "4096"]
end

Когда я запускаюсь free -mв созданной виртуальной машине, я вижу следующий отчет:

             total       used       free     shared    buffers     cached
Mem:          3953        337       3615          0         18        119
-/+ buffers/cache:        199       3753
Swap:            0          0          0

Можно ли назначить перестановку при сборке и подготовке виртуальной машины?

Я попытался установить vm.swappinessв /etc/sysctl.confи перезапустить виртуальную машину, но я не вижу никакого влияния добавления пространства подкачки в VM.

Зачем мне нужно место подкачки? Я бы предпочел вообще не иметь дело с пространством подкачки и запускать все в памяти. Однако для некоторых приложений (например, проект composer для PHP) известно, что при определенных условиях используется много памяти. Без пространства подкачки я должен был бы быть очень либеральным с объемом памяти, который я выбрасываю на ВМ, если бы у меня было пространство подкачки - хотя оно могло бы быть не столь эффективным - теоретически я столкнулся бы с меньшим количеством проблем.

Шон Куинн
источник

Ответы:

4

Настройки памяти, которые вы видите, используются только для настройки оперативной памяти виртуальной машины. Однако определение пространства подкачки является частью образа диска. Это изображение предоставляется вам как часть config.vm.boxопределения в Vagrantfile. В моем конкретном случае я заметил, что пространство подкачки не может быть легко перенастроено (у меня есть только 1 Гбайт подкачки).

В вашем случае я рекомендую изменить базовый образ ( config.vm.box) или добавить файл подкачки в корневую файловую систему, интегрировав, например, этот скрипт в свой Vagrantfile. Это еще одна ссылка, которую стоит попробовать.

С-Отто
источник
Спасибо, я подумал, что базовое изображение должно быть изменено после подстановки. Как оказалось, я могу обойти свои проблемы, используя различные операции в программе, которые требуют много памяти. Не похоже, что есть другое решение, кроме изменения базового изображения.
Шон Куинн
Связанный скрипт (первый) работал хорошо для меня. В случае если ссылка когда-либо устареет: create_swap.sh и remove_swap.sh в виде необработанных
ссылок
12

Просто добавьте эту строку в ваш бродячий файл

Vagrantfile

 # Enable Dynamic Swap Space to prevent Out of Memory crashes
config.vm.provision "shell", inline: "sudo apt install swapspace -y"

А потом репровизия

vagrant up --provision

Как это работает

Это динамический демон пространства подкачки. Их несколько, но вот популярный.

sudo apt install swapspace

Чтобы убедиться, что он работает

sudo service swapspace status

Выдержка из http://pqxx.org/development/swapspace/

Этот системный демон для ядра Linux стремится избавиться от необходимости больших фиксированных разделов подкачки или файлов подкачки.

При установке системы на основе Linux (неизменно GNU / Linux) с Swapspace обычный раздел подкачки может быть опущен или может быть достаточно маленьким. Всякий раз, когда Swapspace обнаруживает во время нормальной работы системы, что требуется больше виртуальной памяти, он автоматически запрашивает пространство на жестком диске. И наоборот, пространство подкачки, которое больше не нужно, снова высвобождается для регулярного использования файловой системой.

Это означает, что при установленном Swapspace определение размера доступного пространства подкачки в системе во время установки больше не является выбором жизни или смерти. Теперь становится практичным запускать GNU / Linux только с одного большого раздела без потери места на диске из-за прискорбного выбора установки. Система также должна иметь возможность обрабатывать случайные задачи с интенсивным использованием памяти, которые занимают гораздо больше места подкачки, чем первоначально предполагалось, не оставляя то же пространство подкачки неиспользуемым и неиспользуемым при обычной работе, как это обычно бывает.

Джонатан
источник
0

Если вы используете Chef для подготовки своего Vagrant-бокса, возможно, самым простым решением будет использование swap_fileресурса. Этот ресурс является новым в Chef 14.0.

Например, добавьте следующее в свой рецепт:

swap_file '/var/swap.1' do
  size 1024
end
Седрик
источник