En tidligere version af denne vejledning blev skrevet af Justin Ellingwood
- Introduktion
- Hvad er Swap?
- Stræk 1 – Kontrol af systemet for swap-oplysninger
- Stræk 2 – Kontrol af ledig plads på harddiskpartitionen
- Stræk 3 – Oprettelse af en swap-fil
- Strin 4 – Aktivering af swapfilen
- Stræk 5 – Gør swapfilen permanent
- Stræk 6 – Tuning af dine swap-indstillinger
- Justering af Swappiness-egenskaben
- Justering af indstillingen for cachetryk
- Slutning
Introduktion
En af de nemmeste måder at beskytte sig mod fejl i programmer, der ikke længere er i hukommelsen, er at tilføje noget swap plads til din server. I denne vejledning vil vi gennemgå, hvordan du tilføjer en swap-fil til en Ubuntu 18.04-server.
Varsel: Selv om swap generelt anbefales til systemer, der anvender traditionelle spinningsharddiske, kan brugen af swap med SSD’er medføre problemer med hardwareforringelse over tid. På grund af denne overvejelse anbefaler vi ikke at aktivere swap på DigitalOcean eller andre udbydere, der anvender SSD-lagring. Hvis du gør det, kan det påvirke pålideligheden af den underliggende hardware for dig og dine naboer. Denne vejledning gives som reference til brugere, der muligvis har systemer med spinning diske andre steder.
Hvis du har brug for at forbedre ydeevnen for din server på DigitalOcean, anbefaler vi at opgradere din Droplet. Dette vil føre til bedre resultater generelt og vil mindske sandsynligheden for at bidrage til hardwareproblemer, der kan påvirke din tjeneste.
Hvad er Swap?
Swap er et område på en harddisk, der er blevet udpeget som et sted, hvor operativsystemet midlertidigt kan gemme data, som det ikke længere kan holde i RAM. Grundlæggende giver det dig mulighed for at øge den mængde oplysninger, som din server kan opbevare i sin arbejds “hukommelse”, med nogle forbehold. Swap-pladsen på harddisken vil hovedsageligt blive brugt, når der ikke længere er tilstrækkelig plads i RAM til at rumme programdata, der er i brug.
Den information, der skrives til disken, vil være betydeligt langsommere end information, der opbevares i RAM, men operativsystemet vil foretrække at beholde kørende programdata i hukommelsen og bruge swap-pladsen til de ældre data. Samlet set kan det at have swap-plads som en nødløsning, når systemets RAM er opbrugt, være et godt sikkerhedsnet mod out-of-memory- undtagelser på systemer med ikke-SSD-lagerplads til rådighed.
Stræk 1 – Kontrol af systemet for swap-oplysninger
Hvor vi begynder, kan vi kontrollere, om systemet allerede har noget swap-plads til rådighed. Det er muligt at have flere swap-filer eller swap-partitioner, men generelt bør én være nok.
Vi kan se, om systemet har nogen konfigureret swap ved at skrive:
- sudo swapon --show
Hvis du ikke får noget output tilbage, betyder det, at dit system ikke har swap-plads til rådighed i øjeblikket.
Du kan verificere, at der ikke er nogen aktiv swap ved hjælp af hjælpeprogrammet free
:
- free -h
Output total used free shared buff/cache availableMem: 985M 84M 222M 680K 678M 721MSwap: 0B 0B 0B
Som du kan se i rækken Swap i output, er der ingen swap aktiv på systemet.
Stræk 2 – Kontrol af ledig plads på harddiskpartitionen
Hvor vi opretter vores swap-fil, skal vi kontrollere vores aktuelle diskforbrug for at sikre os, at vi har nok plads. Det gør vi ved at indtaste:
- df -h
OutputFilesystem Size Used Avail Use% Mounted onudev 481M 0 481M 0% /devtmpfs 99M 656K 98M 1% /run/dev/vda1 25G 1.4G 23G 6% /tmpfs 493M 0 493M 0% /dev/shmtmpfs 5.0M 0 5.0M 0% /run/locktmpfs 493M 0 493M 0% /sys/fs/cgroup/dev/vda15 105M 3.4M 102M 4% /boot/efitmpfs 99M 0 99M 0% /run/user/1000
Enheden med /
i kolonnen Mounted on
er vores disk i dette tilfælde. Vi har masser af plads til rådighed i dette eksempel (kun 1,4 4G brugt). Dit forbrug vil sandsynligvis være anderledes.
Og selv om der er mange meninger om den passende størrelse af et swap space, afhænger det i virkeligheden af dine personlige præferencer og dine programkrav. Generelt er en mængde svarende til eller dobbelt så stor som mængden af RAM på dit system et godt udgangspunkt. En anden god tommelfingerregel er, at alt over 4 g swap er sandsynligvis unødvendigt, hvis du blot bruger det som RAM-fallback.
Stræk 3 – Oprettelse af en swap-fil
Nu da vi kender vores tilgængelige plads på harddisken, kan vi oprette en swap-fil på vores filsystem. Vi tildeler en fil af den ønskede swap-størrelse kaldet swapfile
i vores rod (/)-mappe.
Den bedste måde at oprette en swap-fil på er med programmet fallocate
. Denne kommando opretter øjeblikkeligt en fil af den angivne størrelse.
Da serveren i vores eksempel har 1 G RAM, opretter vi i denne vejledning en fil på 1 G. Juster dette til at opfylde behovene på din egen server:
- sudo fallocate -l 1G /swapfile
Vi kan verificere, at den korrekte mængde plads blev reserveret ved at skrive:
- ls -lh /swapfile
- -rw-r--r-- 1 root root 1.0G Apr 25 11:14 /swapfile
Vores fil er blevet oprettet med den korrekte mængde plads sat til side.
Strin 4 – Aktivering af swapfilen
Nu da vi har en fil af den korrekte størrelse til rådighed, skal vi faktisk gøre den til swapplads.
Først skal vi låse tilladelserne til filen, så kun brugere med root-privilegier kan læse indholdet. Dette forhindrer normale brugere i at få adgang til filen, hvilket ville have betydelige sikkerhedsmæssige konsekvenser.
Mag filen kun være tilgængelig for root ved at skrive:
- sudo chmod 600 /swapfile
Vurificer ændringen af tilladelserne ved at skrive:
- ls -lh /swapfile
Output -rw------- 1 root root 1.0G Apr 25 11:14 /swapfile
Som du kan se, er det kun root-brugeren, der har læse- og skriveflagene aktiveret.
Vi kan nu markere filen som swap-plads ved at skrive:
- sudo mkswap /swapfile
OutputSetting up swapspace version 1, size = 1024 MiB (1073737728 bytes)no label, UUID=6e965805-2ab9-450f-aed6-577e74089dbf
Når vi har markeret filen, kan vi aktivere swap-filen, så vores system kan begynde at udnytte den:
- sudo swapon /swapfile
Vurder, at swap-filen er tilgængelig ved at skrive:
- sudo swapon /swapfile
Vurder, at swap-filen er tilgængelig ved at skrive:
- sudo swapon --show
OutputNAME TYPE SIZE USED PRIO/swapfile file 1024M 0B -2
Vi kan kontrollere outputtet fra free
-hjælpeprogrammet igen for at bekræfte vores resultater:
- free -h
Output total used free shared buff/cache availableMem: 985M 84M 220M 680K 680M 722MSwap: 1.0G 0B 1.0G
Vores swap-fil er blevet oprettet med succes, og vores operativsystem vil begynde at bruge den efter behov.
Stræk 5 – Gør swapfilen permanent
Vores seneste ændringer har aktiveret swapfilen for den aktuelle session. Men hvis vi genstarter, vil serveren ikke automatisk bevare swap-indstillingerne. Vi kan ændre dette ved at tilføje swap-filen til vores /etc/fstab
-fil.
Gør en sikkerhedskopi af /etc/fstab
-filen, hvis noget går galt:
- sudo cp /etc/fstab /etc/fstab.bak
Føj oplysningerne om swap-filen til slutningen af din /etc/fstab
-fil ved at skrive:
- echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
Næste gang gennemgår vi nogle indstillinger, som vi kan opdatere for at indstille vores swap-plads.
Stræk 6 – Tuning af dine swap-indstillinger
Der er et par indstillinger, du kan konfigurere, som vil have indflydelse på dit systems ydeevne, når du har med swap at gøre.
Justering af Swappiness-egenskaben
Parameteren swappiness
konfigurerer, hvor ofte dit system bytter data ud af RAM til swap-området. Dette er en værdi mellem 0 og 100, der repræsenterer en procentdel.
Med værdier tæt på nul vil kernen ikke bytte data til disken, medmindre det er absolut nødvendigt. Husk, at interaktioner med swap-filen er “dyre” i den forstand, at de tager meget længere tid end interaktioner med RAM, og de kan medføre en betydelig reduktion i ydeevnen. Hvis du fortæller systemet, at det ikke skal stole meget på swap-filen, vil det generelt gøre dit system hurtigere.
Værdier, der er tættere på 100, vil forsøge at lægge flere data i swap-filen i et forsøg på at holde mere RAM-plads fri. Afhængigt af dine programmers hukommelsesprofil, eller hvad du bruger din server til, kan dette være bedre i nogle tilfælde.
Vi kan se den aktuelle swappiness-værdi ved at skrive:
- cat /proc/sys/vm/swappiness
Output60
For en Desktop er en swappiness-indstilling på 60 ikke en dårlig værdi. For en server bør du måske flytte den tættere på 0.
Vi kan indstille swappiness til en anden værdi ved at bruge kommandoen sysctl
.
For at indstille swappiness til 10 kan vi f.eks. skrive:
- sudo sysctl vm.swappiness=10
Outputvm.swappiness = 10
Denne indstilling vil forblive indtil næste genstart. Vi kan indstille denne værdi automatisk ved genstart ved at tilføje linjen til vores /etc/sysctl.conf
fil:
- sudo nano /etc/sysctl.conf
I bunden kan du tilføje:
vm.swappiness=10
Spar og luk filen, når du er færdig.
Justering af indstillingen for cachetryk
En anden relateret værdi, som du måske ønsker at ændre, er vfs_cache_pressure
. Denne indstilling konfigurerer, hvor meget systemet vil vælge at cache inode- og dentry-informationer frem for andre data.
Dette er grundlæggende set adgangsdata om filsystemet. Dette er generelt meget dyrt at slå op og meget ofte efterspurgt, så det er en glimrende ting for dit system at cache. Du kan se den aktuelle værdi ved at forespørge proc
filsystemet igen:
- cat /proc/sys/vm/vfs_cache_pressure
Output100
Som det er konfigureret i øjeblikket, fjerner vores system inodeoplysningerne for hurtigt fra cachen. Vi kan indstille dette til en mere konservativ indstilling som f.eks. 50 ved at skrive:
Outputvm.vfs_cache_pressure = 50
Også dette er kun gyldigt for vores aktuelle session. Vi kan ændre dette ved at tilføje det til vores konfigurationsfil, ligesom vi gjorde med vores swappiness-indstilling:
- sudo nano /etc/sysctl.conf
I bunden skal du tilføje den linje, der angiver din nye værdi:
vm.vfs_cache_pressure=50
Spar og luk filen, når du er færdig.
Slutning
Følger du trinene i denne vejledning, får du lidt luft under vingerne i tilfælde, der ellers ville føre til out-of-memory- undtagelser. Swap space kan være utrolig nyttig til at undgå nogle af disse almindelige problemer.
Hvis du løber ind i OOM-fejl (out of memory), eller hvis du finder ud af, at dit system ikke kan bruge de programmer, du har brug for, er den bedste løsning at optimere dine programkonfigurationer eller opgradere din server.