VCCWの遅さはXdebugを切れば解消する

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_enablexdebug.profiler_enablexdebug.remote_autostartfalseにする。

他のチューニング方法の紹介

当方の場合効果がありませんでしたが、ネットワーク系のチューニングもしたので記録を残しておきます。

方法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.ymlipと紐づく。

# 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のプロパティ画面にて名前をコピペする。

Windows 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でなければならないと言われて動かないので前章で行ったパブリックネットワークの設定を元に戻す。

結果

体感速度向上せず。

Vagrantに関する他のページ

お役に立てたらシェアお願いします(^O^)/
  • URLをコピーしました!
もくじ(押すと各章に飛ぶ)