Muy lento laravel homestead / vagrant / virtualbox en Mac OSX


8

Estoy usando Homestead + Vagrant + Virtualbox en una Mac .

Problema

Si bien encontré muchos hilos / respuestas sobre cómo solucionar tiempos de respuesta lentos (por ejemplo, TTFB) ninguno funcionó. Mis tiempos de respuesta varían entre 25 y 32 segundos, lo que obviamente no es aceptable para el desarrollo local.

Las soluciones sugeridas

He intentado muchas soluciones sugeridas desde aquí: https://github.com/laravel/homestead/issues/901

Y también he leído y probado muchas sugerencias de estos hilos:

Aunque hubo respuestas aceptadas, ninguna de ellas me ayudó.

Deshabilitar xdebug

Puedo decir que deshabilitar xdebug como se explica aquí me ayudó a ahorrar 5 segundos.

Cambiar el tamaño del disco

Si bien cambiar el tamaño del disco de la VM de dinámico a fijo como se sugirió aquí y se explicó aquí no ayudó en absoluto (el resultado fue aún peor).

Usar NFS (carpetas de sincronización) como se sugiere aquí

También establecer homestead / vagrant a NFS no ayudó en nada.

Probado (archivo vagabundo):

Vagrant.configure("2") do |config|
  config.vm.synced_folder ".", "/vagrant", type: "nfs", mount_options:['nolock,vers=3,udp,noatime,actimeo=1']
end

También intentado (homestead.yaml)

folders:
    -
        map: '/Users/myuser/PhpstormProjects/example.com'
        to: /home/vagrant/code
        type: "nfs"
        options:
            mount_options: ['nolock','vers=3','udp','noatime','actimeo=1']

NFS estaba funcionando en ambos casos, pero no cambió nada con respecto a TTFB en la carga de la página.

Configuración de natdnshostresolver: desactivado

También intenté apagar natdnshostresolver como se sugiere aquí. No cambió nada.

Ajuste de la imagen de Virtualbox

Por supuesto, también traté de aumentar la RAM, las CPU, las cosas gráficas, etc., pero como puedes imaginar, no ayudó.

Cualquier otra sugerencia

A partir de ahora también estoy abierto a probar, por ejemplo, valet o cualquier otra recomendación / solución que pueda dar.

¡Muchas gracias por adelantado!

Actualización 1

Alterar el nginx.conf en mi VM (después de que @emotality sugiriera un ajuste) ayudó un poco. En aras de la exhaustividad y la posibilidad de que pueda modificarse incluso un poco más, aquí está toda la parte http del archivo nginx.conf.

http {

        ##
        # Basic Settings
        ##

        sendfile on;
        tcp_nopush on;
        tcp_nodelay on;
        # keepalive_timeout 65;
        types_hash_max_size 2048;
        # server_tokens off;

        keepalive_disable none;
        keepalive_requests 200;
        keepalive_timeout 300s;

        server_names_hash_bucket_size 64;
        # server_name_in_redirect off;

        include /etc/nginx/mime.types;
        default_type application/octet-stream;

        ##
        # SSL Settings
        ##

        ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
        ssl_prefer_server_ciphers on;

        ##
        # Logging Settings
        ##

        access_log /var/log/nginx/access.log;
        error_log /var/log/nginx/error.log;

        ##
        # Gzip Settings
        ##

        gzip on;

        # gzip_vary on;
        # gzip_proxied any;
        # gzip_comp_level 6;
        # gzip_buffers 16 8k;
        # gzip_http_version 1.1;
        # gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

        ##
        # Virtual Host Configs
        ##

        include /etc/nginx/conf.d/*.conf;
        include /etc/nginx/sites-enabled/*;
}

Actualización 2

Contenido de homestead.yaml:

ip: 192.168.10.14
memory: 4096
cpus: 2
provider: virtualbox
natdnshostresolver: off
authorize: ~/.ssh/id_rsa.pub
keys:
    - ~/.ssh/id_rsa
folders:
    -
        map: '/Users/myUser/PhpstormProjects/exampleproject.com'
        to: /home/vagrant/code
        type: "nfs"
        options:
            mount_options: ['nolock','vers=3','udp','noatime','actimeo=1']
sites:
    -
        map: exampleproject.local
        to: /home/vagrant/code
databases:
    - homestead
features:
    -
        mariadb: false
    -
        ohmyzsh: false
    -
        webdriver: false
name: exampleproject
hostname: exampleproject

Contenido de Vagrantfile:

# -*- mode: ruby -*-
# vi: set ft=ruby :

require 'json'
require 'yaml'

VAGRANTFILE_API_VERSION ||= "2"
confDir = $confDir ||= File.expand_path("vendor/laravel/homestead", File.dirname(__FILE__))

homesteadYamlPath = File.expand_path("Homestead.yaml", File.dirname(__FILE__))
homesteadJsonPath = File.expand_path("Homestead.json", File.dirname(__FILE__))
afterScriptPath = "after.sh"
customizationScriptPath = "user-customizations.sh"
aliasesPath = "aliases"

require File.expand_path(confDir + '/scripts/homestead.rb')

Vagrant.require_version '>= 2.2.4'

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
    if File.exist? aliasesPath then
        config.vm.provision "file", source: aliasesPath, destination: "/tmp/bash_aliases"
        config.vm.provision "shell" do |s|
            s.inline = "awk '{ sub(\"\r$\", \"\"); print }' /tmp/bash_aliases > /home/vagrant/.bash_aliases"
        end
    end

    if File.exist? homesteadYamlPath then
        settings = YAML::load(File.read(homesteadYamlPath))
    elsif File.exist? homesteadJsonPath then
        settings = JSON::parse(File.read(homesteadJsonPath))
    else
        abort "Homestead settings file not found in " + File.dirname(__FILE__)
    end

    Homestead.configure(config, settings)

    if File.exist? afterScriptPath then
        config.vm.provision "shell", path: afterScriptPath, privileged: false, keep_color: true
    end

    if File.exist? customizationScriptPath then
        config.vm.provision "shell", path: customizationScriptPath, privileged: false, keep_color: true
    end

    if Vagrant.has_plugin?('vagrant-hostsupdater')
        config.hostsupdater.aliases = settings['sites'].map { |site| site['map'] }
    elsif Vagrant.has_plugin?('vagrant-hostmanager')
        config.hostmanager.enabled = true
        config.hostmanager.manage_host = true
        config.hostmanager.aliases = settings['sites'].map { |site| site['map'] }
    end
end

¿Usando nginx o apache?
Emotality

@emotality ¡Gracias por tu comentario! Es nginx / 1.15.8
wbq

Respondió, no estoy seguro si es el problema, pero ¿vamos a ver? Avísame :)
Emotality

intente instalar el complemento bindfs vagrant plugin install vagrant-bindfsy mantener la asignación homestead.yamlno en el archivo vagabundo. También sugiero destruir la VM y comenzar de nuevo.
Navaja

@ Razor gracias por tu sugerencia. Instalé Bindfs y estoy obteniendo ==> myproject: Bindfs seems to not be installed on the virtual machine, installing now myproject: Bindfs 1.13.7 is installed ==> myproject: Machine is ready to use bindfs! ==> myproject: Creating bind mounts after synced_folders... myproject: /home/vagrant/code => /home/vagrant/code. Lamentablemente no resolvió el problema.
wbq

Respuestas:


3

Mis proyectos Laravel también son lentos, pero solo cuando uso Postman, suponiendo que se inicie cada vez que realizo una solicitud que agrega entre 10 y 15 segundos a cada solicitud. Mi solución fue ajustar la Keep-Aliveconfiguración.

Suponiendo que lo que está sucediendo es que abre una nueva conexión, hace apretones de manos, transfiere recursos, cierra la conexión y se repite para cada recurso en su página. Podría estar equivocado, pero intente a continuación y veamos. :)

Esto es solo para el desarrollo local, no sugiero esto para el entorno de producción.


apache

$ sudo nano /etc/apache2/httpd.conf

En la cima:

KeepAlive On
MaxKeepAliveRequests 200
KeepAliveTimeout 300

Luego reinicie apache


nginx

$ sudo nano /etc/nginx/nginx.conf

En el http {}bloque:

keepalive_disable none;
keepalive_requests 200;
keepalive_timeout 300s;

Luego reinicie nginx


Muchas gracias por su extensa respuesta. Ingresé en vagabundo y edité el nginx.conf con nano. Comenté keepalive_timeout 65;y agregué tus líneas sugeridas. Reconocí una ligera disminución de aproximadamente 3 segundos en TTFB, pero en suma todavía tengo 22-23 segundos (el mejor de los casos) para una sola carga de página. Así que parece haber ayudado un poco hasta ahora. Tal vez haya otros ajustes en el nginx.conf que podría hacer y es por eso que agregaré la parte http del nginx.conf a mi pregunta. ¡Gracias!
wbq

Maldición, esto me está molestando ahora ... ¿Intentaste destruir la VM y empezar de nuevo?
Emotality

Si, varias veces. Sin embargo, no con tus cambios nginx. Trataré de hacerlo.
wbq

Gracias de nuevo. Ahora destruí al vagabundo y lo subí de nuevo. Vuelva a hacer los cambios sugeridos y también se aseguró de que Bindfs (sugerido por @Razor) se esté ejecutando. Lamentablemente, todavía no hay resultados para mejor. Supongo que podría tener algo que ver con la cantidad de archivos (14242)?
wbq

3

Gracias a todos ustedes, pero encontré una solución bastante interesante o más bien un problema que tuve.

Estaba usando el entorno local para una instalación de WordPress. Había un archivo llamado " object-cache.php " en la carpeta wp-content que usa Memcached. Memcached está instalado dentro de la granja, pero parece tener una configuración diferente a la de mi servidor en vivo.

Esto lleva a que los archivos locales no se almacenen en caché correctamente, lo que finalmente hace que el código extraiga todas las opciones disponibles de la base de datos para cada solicitud.

En resumen, fue un gran problema de almacenamiento en caché.

Eliminar el archivo object-cache.php ahora es mi solución (lo que resulta en un TTFB de 1.23 segundos).

Solo dejo esto aquí en caso de que alguien se encuentre con un problema similar. Gracias de nuevo por toda la ayuda y pensaron que ustedes pusieron en esto.


0

Una vez tuve un sitio que se conectaba a 'localhost' en lugar de '127.0.0.1' en mi local para el desarrollo, ese pequeño hecho hizo que la búsqueda de DNS tomara años e incluso GraphQL tardó 3 segundos en responder. Tal vez sea algo similar de tu parte.


Gracias por la respuesta. Lo descubrí hace un momento y publicaré mi resultado en un par de minutos.
wbq

0

Vagabundo a través de VirtualBox en Catalina (MacMini finales de 2012 (SSD dual y 16 MB de RAM) posterior a la actualización) ha sido increíblemente lento para mí, no limitado a proyectos PHP o Javascript, aunque eso es principalmente en lo que he estado trabajando. Me he pasado un poco de tiempo a la investigación y la solución que funcionó para mí fue la de añadir /sbin/nfsdy VirtualBoxque Full Disk Accessen Settings->Privacyel Mac, como se describe en el siguiente enlace. Espero que esto ayude a alguien más. En mi caso, TTFB pasó de unos 15 segundos a menos de 1. (Eso es bastante bueno para Vagrant, ¡ja!)

simplemente agregar y habilitar nfsd a la lista completa de acceso al disco debería funcionar

https://github.com/hashicorp/vagrant/issues/10961#issuecomment-567430897


1
Esta respuesta en realidad no ayudó tanto como se indicó, no estoy seguro de si debo redactarla o qué. Me cambié a Laravel Valet, rápido y simple, pero más variante del entorno de producción, ah, bueno.
Jeremy Anderson

-1

Para aquellos que ejecutan Homestead en macOS "High Sierra" o posterior, la solución que funcionó para mí fue tan simple como cambiar algunas configuraciones en el archivo homestead.rb .

Dondequiera que encuentre en su archivo homestead.rb , la configuración para settings['cpus'] ||= 1 cambiarlo a settings['cpus'] ||= 2 . También puede aumentar el tamaño de la memoria (no lo hice) y establecer un valor mayor que el predeterminado settings['memory'] ||= 2048.

Antes de probar casi todas las soluciones encontradas en la web, desde asegurarme de que nfsestaba configurado, agregar scripts y otras sugerencias y ninguna funcionó hasta que aumenté la configuración del valor predeterminado de la CPU a la configuración ['cpus'] || = 2

En el terminal, la simple tarea de ejecutar npm run devo cualquier php artisancomando tomó alrededor de 10 a 15 segundos hasta que el indicador pudo continuar con otros comandos.

Con los cambios anteriores, ¡ ahora solo toma de 2 a 3 segundos !

Espero que esto ayude a cualquiera que experimente este mismo rendimiento lento, especialmente en macOS. "High Sierra" o posterior. Estoy en macOS "Catalina" y todo funciona bien ahora.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.