Cuando manejamos máquinas virtuales con VirtualBox todo va de maravilla, pero cuando usamos máquinas virtuales de forma un poco más automatizada encontrar problemas se vuelve un dolor de cabeza. Hace unos meses decidí probar Vagrant para la automatización en la creación de entornos de desarrollo en Windows 10 con máquinas corriendo Ubuntu. El primer y principal problema que note fueron errores del tipo: "This means that Vagrant was unable to communicate with the guest machine within the configured ("config.vm.boot_timeout value) time period.".
Es más que obvio que es un timeout, pero la razón principal la encontré al leer un blog que explicaba que cuando ajustamos la configuración de la máquina virtual para usar más núcleos del procesador en lugar de acelerar la máquina provocamos que esta se ponga lenta por un error en el que VirtualBox no reconoce los núcleos reales del procesador de los creados por las tecnologías HyperThreading de Intel y SMT de AMD.
Entonces para acelerar una máquina virtual en Vagrant ajustamos el número de núcleos a 1 y aumentamos el uso de memoria RAM hasta lo que sea necesario.
En nuestro "Vagrantfile" buscamos la sección que tenga config.vm.provider "virtualbox" do |vb|
o lo más similar posible para que quede así:
config.vm.provider "virtualbox" do |vb|
# # Display the VirtualBox GUI when booting the machine
# vb.gui = true
#
# # Customize the amount of memory on the VM:
vb.memory = "2048"
vb.cpus = 1
# vb.gui = true
end
La opción vb.cpus
es la que tenemos que ajustar en 1. Para revisar qué tal es la velocidad podemos activar el GUI mediante vb.gui = true
. El uso de memoria RAM lo ajustamos con la opción vb.memory
y es en MB. Para obtener un mejor desempeño lo ideal es colocar el box en un disco de estado sólido y agregarle swap para no tener problemas con herramientas como composer. Otro consejo, pero un poco más complicado de implementar es evitar el uso de las carpetas compartidas de VirtualBox que son las que Vagrant usa por defecto, y usar de forma alternativa NFS, lo ideal es una combinación entre carpetas compartidas y NFS. Para compartir archivos entre Ubuntu como guest y Windows 10 como host con NFS.