WebDev → Vagrant задержки, медленная работа

Столкнулся с медленной загрузкой страниц (точнее задержками TTFB в 10-30 сек) при использовании Vagrant. Настройки классические: LAMP (Ubuntu 16, Apache, MySQL 5.7, PHP 5.6), проект на Yii2, файлы расшарены через NFS.

Проблема: проявляется задержками при загрузке страниц, как с запросами в БД так и без. При повторном открытии (обновлении страницы) задержки не происходят. Если проект вынести из расшаренной директории локально в другое место на виртуалке — то проблема не возникает.

vagrant nfs slow

Решение 1: Проблема связана с низкой скоростью дисковой подсистемы на виртуалке при работе с файлами через NFS, а также c некоторыми нюансами монтирования. И решается добавлением следующей опции в Vagrantfile:

config.vm.synced_folder ".", "/var/www",
    :nfs => true,
    :mount_options => ['nolock']

Ключ nolock отключает блокировку NFS. Из документации:

Selects whether to use the NLM sideband protocol to lock files on the server. When using the nolock option, applications can lock files, but remote applications are not affected by these locks.

NLM locking must be disabled with the nolock option when using NFS to mount /var because /var contains files used by the NLM implementation on Linux. Using the nolock option is also required when mounting exports on NFS servers that do not support the NLM protocol.

Проверить можно через  nfsstat -m, и ищем упоминание nolock, если нет то пробуем:

sudo umount -f /var/www
sudo mount -o 'nolock' 10.10.10.1:'/path/to/project' /var/www

Если помогло, то добавляем в Vagrantfile и не забываем сделать vagrant reload.

Также часто встречаются советы использовать ключи: vers=3,tcp,actimeo=2,fsc,nolock:

vers=3 — явно указываем использовать 3ю версию протокола
tcp — указываем использовать TCP протокол
actimeo=2 — время в секундах за которое файлы и директории будут хранить в кэше файлов атрибутов после обновления  
fsc — заставит NFS использовать FS-Cache

При использовании PuPHPet можно добавить ключ в /puphpet/vagrant/Vagrantfile-local:

machine_id.vm.synced_folder "#{folder['source']}", "#{folder['target']}",
 id: "#{i}",
 type: 'nfs',
 mount_options: ['nolock'], 
 :nfs => { :mount_options => ["dmode=777","fmode=666"] }

Решение 2: Если проблема не решена, она может быть связана с XDebug. Если у вас нет слушателя (ваш IDE не ожидает соединения), то время отклика может быть большим. Попробуйте отключить XDebug для проверки, для этого вphp.ini:

xdebug.remote_autostart=0  
xdebug.remote_enable=0
xdebug.profiler_enable=0

Если одно из решений помогло/не помогло, отпишите свой опыт в комментариях.