Make Gadgets Work

Swap File to create extra memory

Ankit Mittal

While renewing my LetsEncrypt certificate, I found myself in a strange situation where the certbot won't run asking me to update pip and then each time I tried updating pip it failed with the error "error: command 'x86_64-linux-gnu-gcc' failed with exit status 4".

It turns out that this happens due to low memory and with my digitalocean droplet being the cheapest one this was bound to happen sooner rather than later. Fortunately there is a way around it as explained below.

Use of following commands will ensure that the swap file is created which in turn will help avoid the "error: command 'x86_64-linux-gnu-gcc' failed with exit status 4".

Following commands will create a swap file:

sudo dd if=/dev/zero of=/swapfile1 bs=1024 count=524288  
sudo mkswap /swapfile1  
sudo chown root:root /swapfile1  
sudo chmod 0600 /swapfile1  
sudo swapon /swapfile1  

The swap file will now be activated but will be gone after the reboot. It can be reactivated using the last command (I hope - know so as I have now tried it).

Anyway, after creating the swapfile, you will be able to upgrade pip without the aforementioned error. :)

Update: 02/03/2017

I ran into memory issues yet again and I thought instead of increasing the memory for swapfile1, what if I can create another swapfile. I tried this and it works. Infact I felt quite nice uncovering a concept of multiple swapfiles purely based on my whim ;). All I really had to do was repeat above code replacing swapfile1 with swapfile2 and I had two swapfiles working together increasing available memory for my server.

sudo dd if=/dev/zero of=/swapfile2 bs=1024 count=524288  
sudo mkswap /swapfile2  
sudo chown root:root /swapfile2  
sudo chmod 0600 /swapfile2  
sudo swapon /swapfile2  

Thing is after it worked I was a bit intrigued by the concept and read a bit more on swapon / swapoff and few useful commands are listed below:

# To enable all swapfiles 
swapon -a  
# To disable all swapfiles
swapoff -a  
# To see all available swapfiles 
swapon -s  
# To enable a particular swapfile
swapon <filename>