web-dev-qa-db-fra.com

Très lent laravel Homestead / Vagrant / VirtualBox sur Mac OSX

J'utilise Homestead + Vagrant + VirtualBox sur un Mac.

Problème

Bien que j'ai trouvé beaucoup de threads/réponses comment résoudre les temps de réponse lents (par exemple TTFB), aucun d'entre eux n'a travaillé. Mes temps de réponse varient entre 25 et 32 ​​secondes, ce qui n'est évidemment pas acceptable pour le développement local.

Solutions suggérées

J'ai essayé beaucoup de solutions suggérées d'ici: https://github.com/laravel/homestead/issues/901

Et ont également lu et essayé de nombreuses suggestions de ces threads:

Même s'il y avait des réponses acceptées, aucune d'entre elles m'a aidé.

Désactiver Xdebug

Je peux dire que désactivation de xdebug Comme expliqué ici m'a aidé à économiser 5 secondes.

Changer la taille du disque

Lors de la modification de la taille du disque de la machine virtuelle de la dynamique à fixée comme suggérée ici et expliqué ici N'a pas aidé du tout (le résultat était encore pire).

Utilisation de NFS (Dossiers de synchronisation) comme suggéré ici

Définir également une maison familiale/vagabond à NFS n'a rien aidé.

Essayé (Fichier Vagrant):

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

Aussi essayé (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 travaillait dans les deux cas, mais cela n'a pas changé de choses concernant TTFB sur la charge de la page.

Réglage NATDNSHOSTRESOLVER: OFF

J'ai également essayé d'éteindre NatdnshostresResolver comme suggéré ici Cela n'a pas changé de chose.

Ajuster la VirtualBox Image

Bien sûr, j'ai également essayé d'augmenter la RAM, les processeurs, les trucs graphiques, etc., mais comme vous pouvez le comprendre, cela n'a pas aidé.

D'autres suggestions

Dès maintenant je suis aussi ouvert pour essayer par exemple. Valet ou pour toute autre recommandation/solutions que vous pourriez donner.

Merci beaucoup à l'avance !

Mise à jour 1

Altérer le nginx.conf sur mon VM (après @emotality a suggéré un Tweak) aidée un peu. Par souci d'exhaustivité et la possibilité qu'il puisse Soyez modifié même un peu plus, voici toute la partie HTTP du fichier 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/*;
}


Mettre à jour 2

Contenu 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

Contenu 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
9
wbq

J'ai eu une fois un site qui se connecte à "localhost" au lieu de "127.0.0.1" sur mon local pour le développement, ce peu fait que la recherche DNS prend des âges et même graphql a pris 3 secondes pour répondre. Peut-être que c'est quelque chose de similaire à votre fin.

0
p13rnd

Vagrant via Virtualbox sur Catalina (Macmini fin 2012 (Dual SSD et 16 Mo de RAM) après la mise à niveau) a été incroyablement lent pour moi, sans s'y limiter PHP ou des projets JavaScript, bien que c'est surtout ce que je ' J'ai travaillé sur. J'ai passé un peu de temps à rechercher et la solution qui a fonctionné pour moi devait ajouter /sbin/nfsd et VirtualBox à Full Disk Access dans Settings->Privacy Sur le Mac, comme décrit sur le lien ci-dessous. J'espère que cela aidera quelqu'un d'autre. Dans mon cas, TTFB est passée d'environ 15 secondes à moins de 1. (c'est plutôt bon pour Vagrant, ha!)

just adding and enabling nfsd to the full disk access list should work

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

0
Jeremy Anderson

La réponse de @wbq est la meilleure. Mais cela manque une chose qui a fonctionné pour moi. J'ai tout essayé: la version la plus récente de Vagrant, VirtualBox, NFS-Dossiers, Augmentation RAM, etc., vérifiez le code (pas que ce problème est venu sur des autres environnements sauf localement). Il a fallu 8-12secondes Chaque fois que j'ai fait une demande. Assez parler, voici ma solution:

Dans le fichier .env

CACHE_DRIVER=memcached

(Au lieu de cache_driver = tableau)

https://laravel.com/docs/6.x/cache

10 ans Info: Memcached contre la mise en cache interne dans PHP?

0
Rbbn