Windows上にVCCW(Vagrant+VirtualBox)でWordPress開発環境を作ったが遅い。
とにかく遅い。異常に遅い。
インターネット越しのレンタルサーバより遅いなんてありえんやろ…。
こっちは利用者一人、SSDドライブのローカルマシンやで?
Instant WordPressだと倍くらい速いので、仮想マシンだから遅いと言われればそれまでなのかもしれないが…。
開発機なんだからスカスカ動いて欲しい!
結論:Xdebugを切ると速い
先に結論から書くとVCCWでもXdebugを切れば速い。
そこに至るまでの流れとしては、
- Vagrantが遅い
VCCWはPHP7のOPCacheが有効なので処理系の問題ではない
単なるPHPファイルやHTMLは速い- 仮想ディスクの問題か?
- とりまVirtualBoxのネットワーク設定を弄ったが、効果なし
Instant WordPressだと速い- やはり仮想ディスクの問題か?
- 別マシンのHyper-VにイチからUbuntuとWordPressを入れると速い
- 仮想ディスクの問題ではなかった…Xdebugか?
- VCCWの設定でXdebugを切ると速いヽ(=´▽`=)ノ
というものだった。
仮にディスクI/Oが原因ならMySQLを物理マシンに分けねばならず、ひと塊で開発環境を扱えるVagrantの良さが無くなるので嫌だと思っていた。
もっと単純な対処方法で済んでよかった。
Xdebugを切る方法
site.ymlの最後の方にxdebugに関する記述がある。
# PHP ini values
php_ini:
(略)
xdebug.remote_enable: false
xdebug.remote_host: 127.0.0.1
xdebug.remote_port: 9000
xdebug.profiler_enable: false
xdebug.idekey: VCCWDEBUG
xdebug.remote_connect_back: false
xdebug.remote_autostart: false
これらのxdebug.remote_enable
、xdebug.profiler_enable
、xdebug.remote_autostart
をfalse
にする。
他のチューニング方法の紹介
当方の場合効果がありませんでしたが、ネットワーク系のチューニングもしたので記録を残しておきます。
方法1:パブリックネットワークにする
参照サイト様:
VCCWは「ホストオンリーアダプター」がデフォルトだが、VirtualBoxはこれだと遅いので「ブリッジ接続」にすると改善される、とのこと。
Vagrantfileの修正
作成済みVCCW仮想マシンのVagrantfileを下記のように変更してみた。
(修正前)
config.vm.network :private_network, ip: _conf['ip']
(修正後)
config.vm.network :public_network, bridge: "Realtek PCIe GBE Family Controller", ip: _conf['ip']
ポイント:
“private_network
” は「ホストオンリーアダプター」を、 “public_network
” は「ブリッジ接続」を意味する。
_conf['ip']
はsite.yml
又はprovision/default.yml
のip
と紐づく。
# Network Settings
hostname: techo.red.local
ip: 192.168.1.21
当方の環境はサブネットワークが192.168.1.0
、ホストマシンのIPが192.168.1.20
なので、192.168.1.21
にした。
「Realtek PCIe GBE Family Controller
」の部分はコントロールパネルの「ネットワーク接続」で調べる。NICのプロパティ画面にて名前をコピペする。
hostsの修正
ホストマシン側(Windows)のhosts
を修正するのを忘れないように。
(修正前)
192.168.33.11 techo.red.local
(修正後)
192.168.1.21 techo.red.local
仮想マシン再起動
起動 or 再起動。
vagrant up
vagrant reload
結果
結果は体感速度改善せず。
なお、仮想マシンのNIC設定は /etc/network/interfaces
で確認できる。
Vagrantが設定した部分は #VAGRANT-BEGIN
~#VAGRANT-END
とコメントしてくれている。
fuka@cyan MINGW64 /c/usr/dev/vagrant/techo.red.local
$ vagrant ssh
(仮想マシンに入る)
vagrant@techo:~$ vi /etc/network/interfaces
:(略)
#VAGRANT-BEGIN
# The contents below are automatically generated by Vagrant. Do not modify.
auto enp0s8
iface enp0s8 inet static
address 192.168.1.21
netmask 255.255.255.0
#VAGRANT-END
方法2:フォルダ同期をNFS方式に変更する
参照サイト様:
VirtualBoxのshared folders機能を使ったファイル共有は遅いのでNFSで共有すると良い、とあるのでやってみた。
NFSプラグインのインストール
vagrant plugin install vagrant-winnfsd
Vagrantfileを修正
とりあえず自分はこうした。
(修正前)
config.vm.synced_folder _conf['synced_folder'],
_conf['document_root'], :create => "true", :mount_options => ['dmode=755', 'fmode=644']
(修正後)
config.vm.synced_folder _conf['synced_folder'], _conf['document_root'], type: "nfs"
このままだと起動しても
fuka@cyan MINGW64 /c/usr/dev/vagrant/techo.red.local
$ vagrant reload
==> techo.red.local: Attempting graceful shutdown of VM...
:(略)
NFS requires a host-only network to be created.
Please add a host-only network to the machine (with either DHCP or a
static IP) for NFS to work.
NFSはhost-only networkでなければならないと言われて動かないので前章で行ったパブリックネットワークの設定を元に戻す。
結果
体感速度向上せず。