Sette opp swap på Ubuntu

Hvis serveren din har lite RAM og du har problemer med det, eller tror du kan få problemer med det, kan du sette opp swap slik at systemet kan lagre midlertidig til disk i stedet for RAM når det ikke er plass til mer i RAM-minnet. Dette vil være mye tregere enn å lagre til RAM, men til gjengjeld vil du kunne unngå at programmer krasjer hvis det ikke er nok RAM tilgjengelig. I tillegg er systemet relativt smart, slik at det vil prioritere RAM for programmer som kjører og bruke swap til eldre data som ikke trengs like ofte.

Det følgende gjelder for Ubuntu 14.04 på en VPS fra DigitalOcean.

Sjekk swap-informasjon på systemet

Sjekk først om swap allerede er satt opp på serveren din (på DO er det skrudd av som default): sudo swapon -s

Hvis du får tilbake bare overskriftene av tabellen, som under, er det ikke satt opp swap.

Filename                Type        Size    Used    Priority

Du kan også bruke den mer kjente kommandoen free for å vise minnebruk. Sjekk minne- og swap-bruk i MB med kommandoen: free -m

Du vil da få tilbake en tabell som under, hvor vi kan se at total Swap er 0, som vil si at det ikke er satt av noe plass for swap:

             total       used       free     shared    buffers     cached
Mem:           488        128        360          8          4         23
-/+ buffers/cache:         99        388
Swap:            0          0          0

Sjekk ledig plass på disken

Vanligvis setter man opp en egen partisjon for swap, men det er ikke alltid mulig å endre partisjonsoppsettet. Vi kan like gjerne lage en swap-fil på en eksisterende partisjon.

Før vi gjør dette, bør vi sjekke at vi har nok ledig diskplass:

df -h

Da ser vi noe slikt:

Filesystem      Size  Used Avail Use% Mounted on
udev            230M  4,0K  230M   1% /dev
tmpfs            49M  384K   49M   1% /run
/dev/vda1        20G  4,4G   15G  24% /
none            4,0K     0  4,0K   0% /sys/fs/cgroup
none            5,0M     0  5,0M   0% /run/lock
none            245M     0  245M   0% /run/shm
none            100M     0  100M   0% /run/user

Forhåpentligvis ser du nå en partisjon med rikelig ledig plass, som /dev/vda1 over. Hvor mye plass du bør sette av til swap er veldig individuelt, men en tommelfingerregel er dobbelt så mye som størrelsen på RAM. Du kan eventuelt prøve å anslå hvor mye du trenger, eventuelt hvor mye av diskplassen du er villig til å avse.

Lage en swap-fil

Nå skal vi lage en fil med det treffende navnet swapfile på roten av serveren. Filen må allokere den plassen vi vil bruke til swap. Det er hovedsakelig to måter å gjøre dette på:

Den tradisjonelle, trege måten

Tradisjonelt ville vi lagd en fil med preallokert plass med kommandoen dd. Dette verktøyet skriver til disken fra en plass til en annen. Vi kan bruke dd til å skrive nuller til en fil fra en egen enhet i Linux-systemet lokalisert i /dev/zero, som bare spytter ut så mange nuller vi trenger. Vi spesifiserer størrelsen ved å bruke en kombinasjon av bs for blokk-størrelse og count for antall blokker. Hva vi angir disse to parametrene til er nærmest likegyldig. Det som teller er hva produktet blir når de multiplisereres.

For eksempel, hvis vi skal lage en fil på 4GB, kan vi gjøre dette med å sette blokkstørrelsen til 1GB og antallet til 4 (Dobbelsjekk at kommandoen er helt riktig før du kjører den, da den potensielt kan ødelegge data hvis du setter of (output file) til feil plass):

sudo dd if=/dev/zero of=/swapfile bs=1G count=4

 

Vi kan deretter se at 4GB har blitt allokert med ls -lh /swapfile:

-rw-r--r-- 1 root root 4.0G Apr 28 17:15 /swapfile

Men det finnes også en kjappere måte å gjøre det på (det går fint å slette swap-filen hvis du laget den på måten over. Bare kjør sudo rm /swapfile).

Hvis du har laget filen og vil aktivere swap nå, kan du hoppe over neste avsnitt.

Den kjappe måten

En raskere og enklere måte å lage swap-filen på er ved å bruke fallocate. Denne kommandoen lager en fil umiddelbart, uten å måtte skrive null-innhold til den.

For å lage en 4GB swap-fil:

sudo fallocate -l 4G /swapfile

Vi kan sjekke at filen er allokert med riktig størrelse med ls -lh /swapfile

Aktiver swap-filen

Nå er filen laget, men systemet vet ikke at vi ønsker å bruke den til swap. Vi må fortelle systemet at filen skal formateres som swap og deretter aktivere den.

Før vi gjør det, bør vi endre rettighetene på filen så den ikke er lesbar av andre enn root. Hvis andre får tilgang til swap-filen vil det være en stor sikkerhetsrisiko. Endre rettighetene på swap-filen med:

sudo chmod 600 /swapfile

Sjekk at det nå er riktig med ls -lh /swapfile

-rw------- 1 root root 4.0G Apr 28 17:19 /swapfile

Kolonnen til venstre (rettighetene til eieren, root) skal være de eneste som gir rettigheter.

Nå som filen er sikker, kan vi se at systemet skal sette opp swap-plass med:

sudo mkswap /swapfile

Filen er nå klar til å bli brukt til swap, og vi kan aktivere swap med:

sudo swapon /swapfile

Vi kan bruke kommandoene vi brukte i starten for å sjekke at systemet er satt opp med swap nå:

sudo swapon -s

Filename                Type        Size    Used    Priority
/swapfile               file        4194300 0       -1

eller

free -m

             total       used       free     shared    buffers     cached
Mem:          3953        101       3851          0          5         30
-/+ buffers/cache:         66       3887
Swap:         4095          0       4095

Begge viser nå at swap er satt opp og systemet vil bruke det når nødvendig.

Gjør swap-filen permanent

Selv om vi nå har aktivert swap-filen, vil ikke systemet aktivere den igjen når systemet rebootes. Vi kan endre dette med å modifisere filen fstab

sudo nano /etc/fstab

Nederst i filen må du legge til en linje som forteller systemet at det automatisk skal bruke filen du har laget:

/swapfile   none    swap    sw    0   0

Lagre og lukk filen.

Endre swap-innstillinger

Det er mulig å endre noen innstillinger for å gjøre systemet mes mulig effektivt når det kommer til swap. Her er hva DigitalOcean sier om saken:

“The swappiness parameter configures how often your system swaps data out of RAM to the swap space. This is a value between 0 and 100 that represents a percentage.

With values close to zero, the kernel will not swap data to the disk unless absolutely necessary. Remember, interactions with the swap file are “expensive” in that they take a lot longer than interactions with RAM and they can cause a significant reduction in performance. Telling the system not to rely on the swap much will generally make your system faster.

Values that are closer to 100 will try to put more data into swap in an effort to keep more RAM space free. Depending on your applications’ memory profile or what you are using your server for, this might be better in some cases.

We can see the current swappiness value by typing:

cat /proc/sys/vm/swappiness
60

For a Desktop, a swappiness setting of 60 is not a bad value. For a VPS system, we’d probably want to move it closer to 0.

We can set the swappiness to a different value by using the sysctl command.

For instance, to set the swappiness to 10, we could type:

sudo sysctl vm.swappiness=10
vm.swappiness = 10

This setting will persist until the next reboot. We can set this value automatically at restart by adding the line to our /etc/sysctl.conf file:

sudo nano /etc/sysctl.conf

At the bottom, you can add:

vm.swappiness=10

Save and close the file when you are finished.

Another related value that you might want to modify is the vfs_cache_pressure. This setting configures how much the system will choose to cache inode and dentry information over other data.

Basically, this is access data about the filesystem. This is generally very costly to look up and very frequently requested, so it’s an excellent thing for your system to cache. You can see the current value by querying the proc filesystem again:

cat /proc/sys/vm/vfs_cache_pressure
100

As it is currently configured, our system removes inode information from the cache too quickly. We can set this to a more conservative setting like 50 by typing:

sudo sysctl vm.vfs_cache_pressure=50
vm.vfs_cache_pressure = 50

Again, this is only valid for our current session. We can change that by adding it to our configuration file like we did with our swappiness setting:

sudo nano /etc/sysctl.conf

At the bottom, add the line that specifies your new value:

vm.vfs_cache_pressure = 50

Save and close the file when you are finished.”

One thought on “Sette opp swap på Ubuntu”

Leave a Reply

Your email address will not be published. Required fields are marked *