Kaj je swap v Linuxu?

Linux Branje: 2 min

Swap (izmenjalni prostor) je območje na disku, ki ga Linux uporablja kot dopolnilo fizičnemu pomnilniku (RAM). Ko se RAM napolni, jedro redko uporabljene pomnilniške strani zapiše v swap, sproščeni pomnilnik pa dobijo trenutno aktivni programi. Če so zapisani podatki pozneje spet potrebni, jih jedro prebere nazaj v pomnilnik.

Swap je del upravljanja navideznega pomnilnika: programi ne vedo, da je del njihovih podatkov trenutno na disku. Cena za to je hitrost, saj je disk, tudi hiter NVMe SSD, za velikostne razrede počasnejši od RAM-a.

Za kaj je dober in za kaj ne?

Swap je predvsem varnostna rezerva. Če na strežniku za kratek čas zmanjka pomnilnika (na primer ob prometni konici ali med veliko varnostno kopijo), brez swapa jedrov OOM killer takoj ustavi proces, pogosto prav podatkovno bazo. S swapom se sistem upočasni, a lahko konico preživi. Jedro lahko v swap zapiše dolgo neuporabljene pomnilniške strani (na primer podatke storitve, naložene ob zagonu, a od takrat nedejavne) tudi, ko je še prostega RAM-a, tako da več ostane za predpomnilnik datotek.

Swap pa ne nadomesti RAM-a. Če sistem nenehno piše v swap in bere iz njega, se odzivni časi dramatično podaljšajo. To je znak, da strežnik potrebuje več pomnilnika.

Razdelek swap ali datoteka swap

  • Razdelek swap: ločen razdelek diska, običajno nastane ob namestitvi.
  • Datoteka swap: navadna datoteka v datotečnem sistemu. Zlahka jo ustvariš, ji spremeniš velikost ali jo izbrišeš tudi pozneje, zato je na VPS večinoma bolj praktična.

Glede zmogljivosti sta v današnjih jedrih praktično enakovredna. Ustvarjanje datoteke swap korak za korakom opisuje naš članek o OOM killerju in datoteki swap.

Preverjanje swapa

free -h          # pomnilnik in swap: skupaj, uporabljeno, prosto
swapon --show    # vklopljena območja swap in njihova velikost
vmstat 1 5       # stolpca si in so: podatki, prestranjeni noter in ven na sekundo

Samo po sebi ni slabo, če je v izpisu free -h del swapa zaseden: to so lahko dolgo neuporabljene strani. Opozorilni znak je, če so v stolpcih si in so ukaza vmstat trajno vrednosti, različne od nič, kar pomeni, da sistem nenehno izmenjuje strani.

Nastavitev swappiness

Parameter vm.swappiness (0–200, v večini distribucij privzeto 60) določa, kako rad jedro izmenjuje strani namesto praznjenja predpomnilnika datotek. Trenutno vrednost pokaže ukaz cat /proc/sys/vm/swappiness. Na testnih računalnikih sta Ubuntu 24.04 in Debian 12 tekla s tovarniško vrednostjo 60, AlmaLinux 9 in 10 pa s 30: to nastavi profil virtual-guest storitve tuned na navideznih računalnikih (tuned-adm active). Na strežnikih podatkovnih baz pogosto nastavijo nižjo vrednost (na primer 10), da jedro poseže po swapu le v skrajni sili.

Koliko swapa potrebuješ?

Pravila, ki bi veljalo za vse, ni. Na VPS z malo pomnilnika (1–4 GB RAM) je swap v velikosti RAM-a dobro izhodišče, na strežnikih z več pomnilnika je za rezervo običajno dovolj nekaj gigabajtov. Če se swap redno napolni, ne povečuj swapa, temveč pomnilnik: vire paketov KVM VPS je mogoče povečati tudi pozneje. Več praktičnih nasvetov najdeš v našem blogovskem zapisu o datoteki swap.

Nazaj: Linux – članki (76)