When I first started using AWS ec2 instances to host small sites (where the database and web server where on the same box) i was often surprised by how often MySQL kept falling over – WordPress in particular would show the ‘Error establishing a database connection’ message frequently and the MySQL service would need a kick. It was particularly odd given that almost identical boxes hosted on Rackspace where coping fine. After a little rummaging around it became apparent that many EC2 instances don’t come with any swap space by default.
Swap space (or a swap file) is a space on the hard drive that is used as an extension of the RAM assigned to the device. Essentially when the device runs out of physical RAM it can use the swap space assigned as an extension / overflow. It’s much slower than physical RAM so is only advisable as an overflow.
This means that when the memory reaches capacity, there’s no where to go, and MySQL don’t like that. The solution is simply to add swap space. On the default AWS AMI (CentOS) you add swap space as follows (as root or sudo):
/bin/dd if=/dev/zero of=/var/swap.1 bs=1M count=1024 /sbin/mkswap /var/swap.1 /sbin/swapon /var/swap.1
Where 1024 assigns 1GB of swap space. Increase that as you please.
To make sure this is maintained on reboot too add the following line to your fstab (/etc/fstab):
/var/swap.1 swap swap defaults 0 0
You can check this has worked using the ‘free’ command which should now list swap space below the physical memory
Many thanks to all the Stack Overflow posters who jogged my memory on the syntax of this!