Bij een standaard Ubuntu 18.04 installatie, wordt een swap file aangemaakt. Dit is de opslagruimte voor het virtuele geheugen. Waar vroeger hiervoor (automatisch) een partitie aangemaakt werd, zijn ze bij deze versie overgestapt op een bestand. Een beetje zoals de pagefile van Windows. Dit heeft wel een voordeel, want de standaard 2Gb grote van de swap file is niet altijd voldoende. Een partitie daarvoor aanpassen is lang niet altijd mogelijk, maar een swap file kan makkelijk aangepast worden.
Waarom zou je hem aanpassen? Virtueel geheugen wordt gebruikt om het gewone geheugen vrij te houden. Dit betekend misschien wel, dat wanneer swap gebruikt wordt, je eigenlijk te weinig geheugen in de machine hebt zitten. Maar goed, er zijn ook wel eens taken die tijdelijk veel geheugen nodig hebben, en dan is swapping toch wel een voordeel. Let wel op dat het gebruik van virtueel geheugen altijd een negatief effect op de prestaties van de machine heeft.
Er zijn meerdere ideeën over de grote van swap. Zo schrijft How Much Swap Should You Use in Linux? dat Ubuntu deze 2Gig heeft bepaald door de wortel van de hoeveelheid geheugen (√4=2Gb) te nemen. Red Hat zegt bijvoorbeeld minimaal 20% van het geheugen, bij een minimum van 4Gb, terwijl CentOS bij 4Gb geheugen de grote van het geheugen + 2Gb.
Is het dan noodzakelijk om de swap te vergroten? De 2 Gb swap die standaard gedefinieerd is, lijkt in mijn geval soms wat laag. Er zit dus 4Gb geheugen in mijn machine. Nadat de machine opnieuw opgestart is en alle docker containers zijn opgestart, dan merk je dat de machine redelijk het geheugen vol gepropt heeft. Als de machine wat langer draait merk je dat ook de swap gebruikt wordt. Voor de veiligheid wil ik daarom wat extra ruimte creëren.
Als je online zoekt naar het uitbreiden van de swap file, kom je veel artikelen tegen over het vervangen van de swap file. Hierbij moet dan swap uitgeschakeld worden, wat op een productie machine natuurlijk niet aan te raden is. En dit is helemaal niet nodig, want doordat er een file gebruikt wordt, kan hier heel simpel er één aan toegevoegd worden.
De bestaande swap file is /swapfile. Dit zal wel de standaard lokatie zijn. We gaan nu een 2de bestand erbij zetten van 4Gb, deze inschakelen voor swap, en zorgen dat hij na een reboot nog steeds beschikbaar is. Veel artikelen gebruiken het commando dd om het bestand te maken, maar aangeraden wordt om fallocate te gebruiken. Deze is wat parameters ook wat simpeler dan dd. Uiteraard voeren we al deze handelingen uit als root. De extra swapfile noemen we: swapfile-2.
Allereerst maken we het bestand aan. Let van te voren wel op dat je genoeg ruimte heb op de root partitie. Zo niet, zet hem dan gewoon ergens anders neer.
# fallocate -l 4G /swapfile-2
Voor de veiligheid mag alleen root dit bestand benaderen.
# chmod 600 /swapfile-2
Vervolgens gaan we het bestand inzetten als een swap file.
# mkswap /swapfile-2
Setting up swapspace version 1, size = 4 GiB (4294963200 bytes)
no label, UUID=de1c0061-fe8b-4a86-9fa0-0f2002a0a67d
# swapon /swapfile-2
# swapon --show
NAME TYPE SIZE USED PRIO
/swapfile file 2G 0B -2
/swapfile-2 file 4G 0B -3
Om te zorgen dat de nieuwe na opstarten ook gebruikt wordt, voegen we deze toe aan /etc/fstab. Uiteraard kan dit ook handmatig via nano of vi of zo, maar het volgende commando is net zo makkelijk:
# echo '/swapfile-2 none swap sw 0 0' | sudo tee -a /etc/fstab
/swapfile-2 none swap sw 0 0
Mocht je willen zien wat er gebeurd is, bekijk dan even de inhoud van fstab. Ter info: "Het configuratiebestand /etc/fstab bevat informatie om het 'koppelen' van schijfpartities en netwerkopslaglocaties te automatiseren."
# cat /etc/fstab
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point> <type> <options> <dump> <pass>
# / was on /dev/vda1 during installation
UUID=f5915345-a24d-45f7-b1d1-f8a5aaaa0a31 / ext4 errors=continue 0 1
/swapfile none swap sw 0 0
/swapfile-2 none swap sw 0 0
De nieuwe swap ruimte is pas beschikbaar na een reboot, of het handmatig activeren:
swapon /swapfile-2
Het resultaat kunnen we nu zien door naar free te kijken. Dit command geeft een weergave van het geheugen gebruik weer. Dit is overigens net na het herstarten van de machine, dus swap wordt in dit geval nog niet gebruikt.
# free -h
total used free shared buff/cache available
Mem: 3.9G 2.3G 455M 23M 1.2G 1.4G
Swap: 6.0G 0B 6.0G