If you occasionally find that your EC2 instance runs out of memory & you don’t wanna upgrade to a larger instance, consider adding swap space (a.k.a. paging) to it!
Paging works by creating an area on your hard drive & using it for extra memory. This is much slower than normal memory but a lot more of it is available.
To create swap, run these at a terminal:
sudo /bin/dd if=/dev/zero of=/var/swap bs=1M count=1024
sudo /sbin/mkswap /var/swap
sudo chmod 600 /var/swap
sudo /sbin/swapon /var/swap
That creates 1G swap. Increase the 1024 above to get more.
if
is “input file”, of
is “output file”, bs
is “block size” & count
is the number of blocks you want to allocate. See dd
‘s man page here.
That dd
command says “copy from /dev/zero to /var/swap 1024 blocks of size 1 MB each”. It’s a quick way to create a 1 GB file full of zeroes.
To auto-enable swap on reboot, add this to /etc/fstab:
/var/swap swap swap defaults 0 0
Run free -m
or cat /proc/meminfo
to see if the swap is active.
Swap space should be placed on ephemeral instance storage disk, not on an EBS volume. Swapping causes a lot of I/O & will increase EBS cost (only for provisioned IOPS volumes). EBS is also slower than instance store, introduces more latency & comes free with certain types of EC2 Instances.
To create swap on instance store:
sudo mount /dev/xvda2 /mnt
sudo dd if=/dev/zero of=/mnt/swapfile bs=1M count=4096
sudo chown root:root /mnt/swapfile
sudo chmod 600 /mnt/swapfile
sudo mkswap /mnt/swapfile
sudo swapon /mnt/swapfile
sudo swapon -a
And in fstab:
/dev/xvda2 /mnt auto defaults,nobootwait,comment=cloudconfig 0 2
/mnt/swapfile swap swap defaults 0 0
Also see Instance store swap volumes & How do I allocate memory to work as swap space in an Amazon EC2 instance by using a swap file?.