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:
- Respuestas muy lentas en Homestead
- Homestead vagabundo lento
- carga lenta de página vagabunda después de 60 segundos desde la última solicitud
- Acelere la latencia de sincronización entre el host y el invitado en Vagrant (carpetas de sincronización NFS)
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
vagrant plugin install vagrant-bindfs
y mantener la asignaciónhomestead.yaml
no en el archivo vagabundo. También sugiero destruir la VM y comenzar de nuevo.==> 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.Respuestas:
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-Alive
configuració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
En la cima:
Luego reinicie apache
nginx
En el
http {}
bloque:Luego reinicie nginx
fuente
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!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.
fuente
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.
fuente
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/nfsd
yVirtualBox
queFull Disk Access
enSettings->Privacy
el 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!)https://github.com/hashicorp/vagrant/issues/10961#issuecomment-567430897
fuente
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 asettings['cpus'] ||= 2
. También puede aumentar el tamaño de la memoria (no lo hice) y establecer un valor mayor que el predeterminadosettings['memory'] ||= 2048
.Antes de probar casi todas las soluciones encontradas en la web, desde asegurarme de que
nfs
estaba 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'] || = 2En el terminal, la simple tarea de ejecutar
npm run dev
o cualquierphp artisan
comando 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.
fuente