Vagrant + VirtualBoxで通信やgitコマンドが遅いのを回避


Vagrant + VirtualBox環境で開発をしていて、やたら遅いなと思った2点を解決した時のメモ。

通信が遅い

Vagrant上でdeployをすると、通常30秒で終わる処理が、なぜか5分以上かかっていた。
調べると、CentOSの問題とのこと。

[参考]
RHEL6/CentOS6では、single-request-reopen を必須にしたい…[IPv6]

↑ここに書いてある通り、

vagrant:~$ sudo vim /etc/resolv.conf

options single-request-reopen

を追記すると、通常の速度を取り戻した。

他で調べた感じだと、Vagrantの設定(Vagrantfile)でも回避可能とのこと。

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  ...
  config.vm.provider "virtualbox" do |vb|
    vb.customize ["modifyvm", :id, "--natdnsproxy1", "on"]
    vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
  end
  ...
end

ただ、この設定だとメールが送れなくなる不具合があるそうなので、先の設定変更の方がよさそう。

共有フォルダへのアクセス(git)が遅い

共有フォルダへのアクセスが遅い。
如実なのは、アクセスが多いgitコマンド。git status実行すると、5秒位かかる。

vagrant:~$ time git status
:
real	0m4.984s
user	0m0.035s
sys	0m0.687s

共有フォルダをNFSにしてcachefilesdを使えば、100%ではないが、速度を改善することができる。

まずはVagrantfileの共有フォルダ設定部分をNFSに変更。マウントオプションはFSCである必要があるとのこと。

web.vm.synced_folder "../server", "/home/vagrant/server"
↓
web.vm.synced_folder "../server", "/home/vagrant/server", type: "nfs", mount_options: ['rw', 'vers=3', 'tcp', 'fsc']

そしてvagrant reloadで再起動。

$ vagrant reload

起動時にパスワードを聞かれると思うので、PCにログインした時のパスワードを入力。

いつも通りvagrant sshでログイン。

$ vagrant ssh

sshログイン後、yumにてcachefilesdをインストール。

$ sudo yum -y install cachefilesd

インストールが終わったら、cachefilesdを起動。

vagrant:~$ sudo /etc/init.d/cachefilesd start

キャッシュフォルダが出来ていればOK。

vagrant:~$ sudo find /var/cache/fscache/
/var/cache/fscache/
/var/cache/fscache/graveyard
/var/cache/fscache/cache

NASの利用状況を確認します。
FSCがyesとなっていればfscacheが利用されているとのこと。

vagrant:~$ cat /proc/fs/nfsfs/volumes
NV SERVER   PORT DEV     FSID              FSC
v3 c0a82101  801 0:19    1000001:0         yes

この後、git statusを実行すると、まだ遅い。
しかし、先程のキャッシュフォルダを見ると、キャッシュされていることが分かる。

vagrant:~$ sudo find /var/cache/fscache/
/var/cache/fscache/
/var/cache/fscache/graveyard
/var/cache/fscache/cache
/var/cache/fscache/cache/@4a
/var/cache/fscache/cache/@4a/I03nfs
/var/cache/fscache/cache/@4a/I03nfs/@96
/var/cache/fscache/cache/@4a/I03nfs/@96/Jc0000000000000cGx400
/var/cache/fscache/cache/@4a/I03nfs/@96/Jc0000000000000cGx400/@03
/var/cache/fscache/cache/@4a/I03nfs/@96/Jc0000000000000cGx400/@03/J11000000000004000400000000000000000M000000g00000100Kb000wFe000jt000oG3000000040000g000000000

何回かgit statusを実行すると、速度が改善されていくのが分かる。

vagrant:~$ time git status
:real	0m1.085s
user	0m0.020s
sys	0m0.203s
  • このエントリーをはてなブックマークに追加