Mac OSXの非常に遅いlaravel homestead / vagrant / virtualbox


8

私が使用していますMacでホームステッド+ベイグラント+ Virtualboxのを

問題

遅い応答時間(TTFBなど)を修正する方法をたくさんのスレッド/回答で見つけましたが、どれも機能しませんでした。私の応答時間は25〜32秒の間で変化します。これは明らかにローカル開発では受け入れられません。

推奨されるソリューション

私はここから多くの提案された解決策を試しました:https//github.com/laravel/homestead/issues/901

また、これらのスレッドからの多くの提案を読んで試してみました。

受け入れられた回答があったとしても、それらのどれも私を助けませんでした。

xdebugを無効にする

ここで説明されているようにxdebug無効にすることは言うことができ ます 5秒節約ます。

ディスクサイズの変更

提案されるように固定するダイナミックからVMのディスクのサイズを変更しながら、ここと説明し、ここですべての助けにはならなかった(結果さえも悪化していました)。

ここで提案されている NFS(同期フォルダ)の使用

また、homestead / vagrantをNFSに設定しても効果はありませんでした。

試してみました(贅沢なファイル):

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

また試しました(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はどちらの場合でも機能していましたが、ページの読み込み時のTTFBに関しては変わりませんでした。

natdnshostresolverの設定:オフ

ここで提案されているように私もnatdnshostresolverをオフにしようとしました でてが、変更はありませんでした。

Virtualboxイメージの調整

もちろん、RAM、CPU、グラフィックなどを増やすことも試みましたが、あなたが理解できるように、それは助けにはなりませんでした。

その他の提案

今のところ、私は、例えば、係員、またはあなたが与えることができる他のあらゆる推奨事項/解決策を試すこともできます。

よろしくお願いします!

アップデート1

VM のnginx.confを変更すると(@emotalityが調整を提案した後)、少しは役に立ちました。完全性と少しでも調整できる可能性のために、nginx.confファイルのhttp部分全体を次に示します。

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/*;
}

アップデート2

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

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

nginxまたはapacheを使用していますか?
絵文字

@emotalityコメントありがとうございます!それのnginxの/ 1.15.8
wbq

回答済み、その問題かどうかはわかりませんが、見てみましょうか?私に知らせてください:)
感情性

bindfsプラグインをインストールしvagrant plugin install vagrant-bindfsて、マッピングをvagrantファイルに含めhomestead.yamlないようにしてください。また、VMを破棄して最初からやり直すことをお勧めします。
Razor

@Razor、ご提案ありがとうございます。私はBindfsをインストールしましたし、私は取得しています==> 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。残念ながらそれは問題を解決しませんでした。
wbq

回答:


3

私のLaravelプロジェクトも遅いですが、Postmanを使用している場合にのみ、リクエストを実行するたびに起動し、すべてのリクエストに10〜15秒の時間がかかると想定しています。私の解決策は、Keep-Alive設定。

何が起こっていると仮定すると、新しい接続が開かれ、ハンドシェイクが行われ、リソースが転送され、接続が閉じられ、ページ上のすべてのリソースに対して繰り返されます。私は間違っているかもしれませんが、以下を試してみてください。:)

これはローカルでの開発のみを目的としており、本番環境では推奨しません。


Apache

$ sudo nano /etc/apache2/httpd.conf

頂点で:

KeepAlive On
MaxKeepAliveRequests 200
KeepAliveTimeout 300

次に、Apacheを再起動します


nginx

$ sudo nano /etc/nginx/nginx.conf

http {}ブロック:

keepalive_disable none;
keepalive_requests 200;
keepalive_timeout 300s;

次にnginxを再起動します


幅広い回答ありがとうございます。vagrantにログインし、nginx.confをnanoで編集しました。コメントアウトしkeepalive_timeout 65;て、提案された行を追加しました。私はTTFBで約3秒のわずかな減少を認識しましたが、合計すると、単一のページのロードに22〜23秒(ベストケース)がまだあります。したがって、これまでのところ少しは役に立ったようです。多分私ができるnginx.confに他の微調整があるので、私の質問にnginx.confのhttp部分を追加します。THX!
wbq

くそっ、これは今私を悩ませています。VMを破壊して、最初からやり直しましたか?
絵文字

はい、数回。nginxの変更ではありませんが。そうしようと思います。
wbq

再度、感謝します。私は今、浮浪者を破壊し、再びそれを上げました。提案された変更を再度行い、Bindfs(@Razorが推奨)が実行されていることを確認しました。残念ながらまだ良い結果はありません。ファイルの量(14242)に関係しているのではないでしょうか?
wbq

3

皆さんありがとうございましたが、私は非常に興味深い解決策、または私が抱えていた問題を見つけました。

WordPressのインストールにローカル環境を使用していました。「object-cache.php」というファイルがありましたMemcachedを使用するwp-contentフォルダーに」。Memcachedはホームステッド内にインストールされていますが、実際のサーバーとは構成が異なるようです。

これにより、ローカルファイルが適切にキャッシュされなくなり、最終的に、コードが各要求に対してデータベースからすべての使用可能なオプションを取得することになります。

要するに、それは巨大なキャッシング問題でした。

object-cache.phpファイルを削除することが私の解決策です(TTFBは1.23秒になります)。

誰かが同様の問題に遭遇した場合に備えて、ここではそのままにしておきます。すべての助けをありがとう、そして皆さんがこれに入れたと思った。


0

開発のためにローカルで「127.0.0.1」ではなく「localhost」に接続しているサイトがあったことがありましたが、DNSルックアップに時間がかかり、GraphQLでさえ応答に3秒かかりました。多分それはあなたの側で似たようなものです。


返信いただきありがとうございます。私はたった今それを理解し、数分で私の結果を投稿します。
wbq

0

CatalinaのVirtualBox経由のVagrant(アップグレード後のMacMini Late 2012(デュアルSSDおよび16MB RAM))は、PHPまたはJavascriptプロジェクトに限定されず、信じられないほど遅くなっています。私は研究少し時間を費やしてきたし、私のために働いたソリューションを追加することでした/sbin/nfsdし、VirtualBoxFull Disk AccessしてSettings->Privacy、下記のリンクで説明するように、Mac上で。これが他の誰かの役に立つことを願っています。私の場合、TTFBは約15秒から1未満になりました(これはVagrantにとってかなり良いことです)。

フルディスクアクセスリストにnfsdを追加して有効にするだけで機能します

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


1
この回答は実際には示されているほど役に立ちませんでした。それを編集する必要があるかどうかはわかりませんか?私はLaravel Valetに切り替えました。ジッピーでシンプルですが、実稼働環境からのバリアントです。
Jeremy Anderson

-1

macOS "High Sierra"以降でHomesteadを実行している人にとって、私にとって効果的な解決策は、homestead.rbのいくつかの設定を変更するのと同じくらい簡単でした。ファイルのでした。

homestead.rbファイルのどこにいても、設定はにsettings['cpus'] ||= 1 変更し settings['cpus'] ||= 2ます。また、あなたはメモリサイズを増やし(私はしませんでした)、デフォルト値よりも大きい値を設定することができますsettings['memory'] ||= 2048

Webで見つかったほとんどすべてのソリューションを試す前nfsは、設定が完了していること、スクリプトやその他の提案を追加していたことから、cpuのデフォルト値の設定をsettings ['cpus'] || = 2に増やすまで機能しませんでした。

ターミナルでは、プロンプトを実行して他のコマンドを続行できるようになるまで、実行npm run devまたはphp artisanコマンドの単純なタスクに約10〜15秒かかりました

上記の変更により、わずか2〜3秒で完了します。

特にmacOSで、これと同じ遅いパフォーマンスを経験している人を助けることを願っています。「ハイシエラ」以降。私はmacOS "Catalina"を使用しており、すべて正常に動作します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.