¿Es posible crear un archivo de intercambio para una máquina virtual invitada de Linux administrada por Vagrant?

8

En mi Vagrantfiletengo el siguiente proveedor definido:

Extracto de Vagrantfile:

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

Cuando corro free -mdentro de la VM creada, veo el siguiente informe:

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

¿Es posible asignar swappiness cuando la VM se está construyendo y aprovisionando?

He intentado fijar vm.swappinessen /etc/sysctl.confy reiniciar la máquina virtual, pero no veo ningún efecto de añadir espacio de intercambio a la máquina virtual.

¿Por qué necesito espacio de intercambio? Prefiero no tratar con el espacio de intercambio en absoluto y ejecutar todo en la memoria. Sin embargo, para algunas aplicaciones (el proyecto compositor para PHP, por ejemplo) son conocidas por usar mucha memoria bajo ciertas condiciones. Sin espacio de intercambio, tengo que ser muy liberal con la cantidad de memoria que arrojo a una máquina virtual, si tuviera espacio de intercambio, aunque podría no ser tan eficiente, teóricamente tendría menos problemas.

Sean Quinn
fuente

Respuestas:

4

La configuración de memoria que ve solo se usa para configurar la RAM de la VM. Sin embargo, la definición del espacio de intercambio es parte de la imagen del disco. Esta imagen se le proporciona como parte de la config.vm.boxdefinición en Vagrantfile. En mi caso específico, noté que el espacio de intercambio no se puede reconfigurar fácilmente (solo tengo 1 GByte de intercambio).

En su caso, recomiendo cambiar la imagen base ( config.vm.box) o agregar un archivo de intercambio a su sistema de archivos raíz integrando, por ejemplo, este script en su archivo Vagrantfile. Este es otro enlace que parece que vale la pena probar.

C-Otto
fuente
Gracias, pensé que la imagen base tenía que tener su intercambio modificado después de mirar más a fondo. Resulta que puedo solucionar mis problemas usando diferentes operaciones en el programa que requieren mucha memoria. No parece que haya otra solución que no sea modificar la imagen base.
Sean Quinn el
El guión vinculado (primero) funcionó muy bien para mí. En caso de que el enlace se vuelva obsoleto: create_swap.sh y remove_swap.sh como gists sin procesar
panepeter
12

Simplemente agregue esta línea a su archivo vagabundo

Archivo vagabundo

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

Y luego reprovisión

vagrant up --provision

Cómo funciona

Este es un demonio de espacio de intercambio dinámico. Hay varios, pero aquí hay uno popular.

sudo apt install swapspace

Para verificar que se está ejecutando

sudo service swapspace status

Extracto de http://pqxx.org/development/swapspace/

Este demonio del sistema para el kernel de Linux tiene como objetivo eliminar la necesidad de particiones de intercambio o archivos de intercambio grandes y fijos.

Al instalar un sistema basado en Linux (invariablemente GNU / Linux) con Swapspace, se puede omitir la partición de intercambio habitual o se puede mantener bastante pequeña. Siempre que Swapspace encuentre durante el uso normal del sistema que se necesita más memoria virtual, reclamará automáticamente espacio del disco duro. Por el contrario, el espacio de intercambio que ya no se necesita se libera nuevamente para que el sistema de archivos lo use con regularidad.

Esto significa que con Swapspace instalado, dimensionar el espacio de intercambio disponible del sistema durante la instalación ya no es una opción de vida o muerte. Ahora se vuelve práctico ejecutar GNU / Linux en una sola partición grande, sin perder espacio en disco debido a las lamentables opciones de instalación. El sistema también debería ser capaz de manejar la tarea ocasional de uso intensivo de memoria que requiere mucho más espacio de intercambio de lo previsto originalmente, sin dejar el mismo espacio de intercambio sin usar e inutilizable durante el funcionamiento normal, como suele ser el caso.

Jonathan
fuente
0

Si está utilizando Chef para aprovisionar su caja Vagrant, la solución más fácil es probablemente usar el swap_filerecurso. Este recurso es nuevo en Chef 14.0.

Por ejemplo, agregue lo siguiente a su receta:

swap_file '/var/swap.1' do
  size 1024
end
Cédric
fuente