Gyakran találkozom azzal a nézettel a Linux felhasználók részéről, hogy ha a gépben elegendő RAM van, a swap (lapozófájl/lapozóterület) használata teljesen fölösleges, sőt, lelassítja a rendszert.
A válaszom erre a feltételezésre az hogy nem, a swap-et szinte mindig érdemes bekapcsolva hagyni!
Még akkor is, ha sok szabad RAM áll rendelkezésre, a swap jelenléte kifejezetten javíthatja a Linux teljesítményét és stabilitását.
- Tévhit: „Ha van elég RAM-om, a swap csak lassít”
Sokan úgy gondolnak a swap-re, mint egy lassú „pót-RAM-ra”, ami csak akkor kell, ha elfogy a fizikai memória. Mivel a lemezről (vagy SSD-ről) történő olvasás lassabb, mint a RAM, logikusnak tűnhet a következtetés: ha kiiktatjuk a swap-et, a rendszer garantáltan csak a gyors RAM-ot fogja használni. A valóságban azonban a Linux Kernel memóriakezelése ennél sokkal intelligensebb.
Hogyan segít a swap bőséges RAM esetén is?
Inaktív memórialapok kiszervezése: a futó alkalmazások sok olyan memórialapot (memory page) foglalnak le, amelyeket az elindításuk óta szinte egyszer sem használtak újra. A kernel ezeket a ritkán használt adatokat áthelyezi a swap-be.
Több hely a gyorsítótárnak (Cache): a felszabadult fizikai RAM-ot a kernel a lemezolvasási gyorsítótárra (page cache) tudja fordítani. Mivel az aktívan használt adatfájlok és programkódok gyorsítótárazása sokkal nagyobb teljesítménynövekedést hoz, mint az inaktív adatok RAM-ban tartása, a rendszer összességében gyorsabbá válik.
- A biztonsági háló: kerüld el az OOM Killert!
Mi történik akkor, ha nincs swap, és a rendszer memóriája mégis elfogy (például egy memóriaszivárgás vagy hirtelen terheléstüske miatt)?
Swap nélkül: a kernel nem tud több memóriát kiosztani, ezért végső megoldásként életbe lép az OOM (Out Of Memory) Killer. Ez a folyamat kíméletlenül lelövi a legtöbb memóriát használó alkalmazást!
Swap jelenlétében: a swap puffert biztosít. Bár a rendszer a lemezes lapozás miatt érezhetően lelassulhat, ez időt ad a felhasználónak (vagy a monitoring rendszernek), hogy reagáljon a problémára, mielőtt a kritikus szolgáltatások összeomlanának.
- Rendszerhangolás: swappiness és vfs_cache_pressure
A swap működését finomhangolhatjuk a Linux sysctl paramétereivel. A Linux memória-kezelésének finomhangolása során ez a két leggyakrabban módosított Kernel-paraméter. Megfelelő beállításukkal a rendszer érezhetően gyorsabbá, válaszképesebbé válhat, és csökkenthető a lemezre való felesleges írás/olvasás (I/O) mértéke.
vm.swappiness (alapértelmezett: 60)
Mit csinál? Azt szabályozza, hogy a Kernel milyen arányban szabadítson fel RAM-ot a nem használt programadatok (memórialapok) a swap-be mozgatásával, a fájl-cache kiürítésével szemben.
Skála: 0 és 200 között.
Alacsonyabb érték: a rendszer hosszabban a fizikai RAM-ban tartja az adatokat.
Magasabb érték: a rendszer korábban elkezdi kiírni az inaktív memórialapokat a swap-be.
vm.vfs_cache_pressure (alapértelmezett: 100)
Mit csinál? Azt határozza meg, hogy a Kernel mennyire agresszívan ürítse ki a RAM-ból a fájlrendszer metaadatait (VFS dentry és inode cache, pl. könyvtárszerkezetek, fájlok helye és tulajdonságai).
Skála: 0-tól felfelé (nincs szigorú felső határa).
100 alatti érték: a rendszer „ragaszkodik” a fájlmetaadatokhoz, és a RAM-ban tartja azokat (kevesebb lemez-I/O, több felhasznált RAM).
100 feletti érték: a rendszer gyorsan kidobja a fájlmetaadatokat a RAM-ból, hogy helyet csináljon a programoknak.
Ajánlások:
Felhasználási profil | vm.swappiness | vm.vfs_cache_pressure | Fő előnye ----------------------|---------------|-------------------------|---------- Általános (16GB+ RAM) | 10 | 50 | Gördülékenység, gyors fájlelérés Kevés RAM / Szerver | 30 – 60 | 150 | Több RAM biztosítása a folyamatoknak SSD kímélő | 1 | 50 | Minimális lemezes írás/olvasás Alapértelmezett | 60 | 100 | Általános, biztonságos egyensúly
Beállítás:
Hagyományos rendszereknél az /etc/sysctl.conf, újabb rendszereknél az általunk létrehozott /etc/sysctl.d/99-swappiness.conf fájlba írjuk a kért értékeket, pl.:
vm.swappiness = 10 vm.vfs_cache_pressure = 50
Érvényesíteni a (sudo) sysctl --system paranccsal tudjuk, ellenőrizni a cat /proc/sys/vm/swappiness, és a cat /proc/sys/vm/vfs_cache_pressure parancsokkal.
Ha bizonytalan vagy, érdemes a vm.swappiness = 10 és vm.vfs_cache_pressure = 50 párossal indítani asztali számítógépen. Teszteld a rendszert pár napig, ha nem tapasztalsz memóriahiányt, ez a kombináció adja a legjobb felhasználói élményt!
Berus
