Search code examples
drupaldrupal-7vagrant

Drupal very slow in Vagrant environment


I've begun migrating a lot of our development environments to Vagrant. So far, this has been great for almost everything, but our first Drupal migration is unusable. It's unbelievably slow. Our Wordpress, CakePHP and Node.js sites all perform very adequately or better, but not Drupal. This think is just awful.

The box is a Veewee-created Ubuntu 12.04 64bit machine. It's the same base box we use for all of our web-based projects so nothing unique there. In my sites directory, I have a canonical directory (sites/my-site/) with all of the site resources and a symlink to that canonical directory with the domain name (sites/dev.mysite.com -> /vagrant/www/sites/my-site) that is evidently required for some module that the team is using.

This is a mixed Windows/OSX dev team and it's slow across both platforms. The only semi-unconventional snippet from my Vagrantfile is this:

config.vm.forward_port 80, 8080

config.vm.share_folder( "v-root", "/vagrant", ".", :extra => 'dmode=777,fmode=777' )

# Allows symlinks to the host directory.
config.vm.customize ["setextradata", :id, "VBoxInternal2/SharedFoldersEnableSymlinksCreate/v-root", "1"]

Vagrant::Config.run do |config|
  config.vm.provision :shell, :path => "provision.vm.sh"
end

My shell provisioner only does a couple of things:

  • Installs drush
  • Creates the aforementioned symlink to the canonical site directory
  • Writes out an Nginx server block
  • If necessary, creates a settings.php file.

Is there anything I can do to improve performance? Like, a lot?

UPDATE

I've narrowed this down to a point where it looks like the issue is the remote database. To compare apples to apples with no project baggage, I downloaded a fresh copy of Drupal 7.21 and performed a standard install from the Vagrant web server against 3 different databases:

  • A new database created on the same Vagrant VM as the webserver (localhost)
  • A new database created on the shared dev server used in the original question (dev)
  • A new database created on an EC2 instance (tmp)

Once that was done, I logged in to the fresh Drupal install and loaded the homepage (localhost:8080) 5 times. I then connected to each database and loaded the same page, the same way. What I found was that the page loaded 4-6x slower when Drupal was connected to the remote database.

Remember, this is a fresh (standard) install. There is no project baggage.


Solution

  • I just was trying to solve this issue myself. I tried the suggestions here and at Rails Windows Vagrant very slow response time. No real luck, I shaved 200 ms off 1800 ms response time on a warm request with no real data rendered. This with Ruby on Rails, not Drupal. The problem is the same, though.

    Switching the shared folder to Rsync gave me a response time of ~280ms on that same request.

    Vagrantfile:

      config.vm.synced_folder '.', '/vagrant', type: 'rsync',
                                           rsync__exclude: '.git/'
    

    Usage:

    $ vagrant up
    $ vagrant rsync-auto
    

    The latter command will watch your working dir and sync changed automatically.

    See https://www.vagrantup.com/docs/synced-folders/rsync.html and https://www.vagrantup.com/docs/cli/rsync-auto.html