I ran across an issue today where my
npm install was failing with a cryptic 'killed' error. I knew the issue was probably due to RAM pressure as I was running on a Digital Ocean 512MB droplet. Instead of upgrading the droplet to 1GB just to get past npm, I added a swapfile.
It's not a good idea to rely on swap, especially on VPS systems with SSDs. It's much slower than RAM and constant writes to SSDs can cause issues due to durability limits. If you consistently need more RAM than is available, you should likely upgrade your VM.
First, check to see if you have any swap set up already:
$ sudo swapon -s
If you only see the table headers, you don't have any swap configured. Proceed.
You can also check
free -m to see if there is a line beginning with
You also need to have available disk space to use. Check with:
$ df -h
There should be a
/dev/___ with some free space.
Create a 2GB swap file at your root:
$ sudo fallocate -l 2G /swapfile
You can make this any size you need by changing the
2G to your desired size.
Adjust permissions so only root can read/write:
$ sudo chmod 600 /swapfile
$ ls -lh /swapfile # -rw------- 1 root root 2.0G Aug 16 13:26 /swapfile
Set up the swap file:
$ sudo mkswap /swapfile
Enable the swap file:
$ sudo swapon /swapfile
This can be checked with:
$ sudo swapon -s
Now, instead of just the headers returned in step 1, you should see an entry for the new swap file we just created.
The swap will not persist across reboots by default. To make it persist, we need to add it to the fstab (file systems table) file:
$ sudo nano /etc/fstab
Add the following to the end of the file:
/swapfile none swap sw 0 0
5. Tweak swappiness (optional)
The defaults aren't the best for VMs and SSDs. We can make the OS swap as little as possible by changing the
$ sudo sysctl vm.swappiness=10
Again, this will not persist across reboots, so we need to add it to 'sysctl.conf`:
$ sudo nano /etc/sysctl.conf
Add the following line to the very bottom:
That's it. You now have a 2GB swap file and your
npm installs should now complete without error. Well, without errors due to RAM limits anyway...