Hogy lehet a linuxot rávenni, hogy ha sok szabad memóriám van, ugyan hozza már vissza a kiswappolt dolgokat RAM-ba?
Ha csinálnom kell valami memóriaigényes dolgot, a rendszer érthető módon kiswappol ezt-azt, böngésző egyes tabjait, más programokat. Aztán befejeződik a memóriaigényes feladat, és felszabadul 5 giga RAM. De ami kiment a swapba, ott is marad. Magától soha nem hozná vissza őket a memóriába, csak ha újra használni kezdem a kiswappolt programokat, tabokat. A hócipőm tele van, hogy egy halom szabad memóriával 10-20 másodperceket kell várnom egy ablakváltásra, mert nem volt annyi esze a rendszernek, hogy a háttérben fokozatosan visszatöltse a kiswappolt adatokat, hátha kedvem támad még használni őket életemben...
Van erre valami megoldás? Egy olyan beállítás kéne nekem, ami a "swappiness" ellentéte, azaz a rendszernek nem a memóriából való kifutásnál, hanem a memória felszabadulásánál való viselkedését kontrollálja.
Köszi. Erre én is gondoltam, hogy kéne egy SSD, arra tenni a swapot. Sajnos ez a jelen laptopomnál csak egy 2-in-1 vinyóval menne amit most nem engedhetek meg magamnak. De legközelebb így tervezek majd.
Azért ha valaki tud programot, ami a szabad kapacitást látva alacsony prioritáson tud ilyet csinálni a háttérben, szóljon. Igazából a sebessége se fontos, a legtöbb dologhoz nem azonnal érek hozzá, hanem percek vagy akár órák után, de még mindig swapban van.
Ahogy már írták, a vm.swapiness kernelparamétert kell beállítani (rootként terminálban).
A jelenlegi értéket a
sysctl vm.swappiness
paranccsal tudod lekérdezni (a legtöbb disztrónál általában 60 az alapértelmezett).
Beállítani így lehet:
sysctl vm.swappiness=5
De ezzel még nem vagyunk kész, mert ha újraindítod a rendszert, akkor az érték elveszik. Hogy ne vesszen el, be kell írnunk egy konfigurációs fájlba. Alapértelmezetten az /etc/sysctl.conf fájlt használja a rendszer, de nem ajánlott ezt szerkeszteni, mert egy későbbi frissítés felülírhatja. Ehelyett az /etc/sysctl./d mappában kell létrehozni egy fájlt, pl. 99-sysctl.conf néven (ez a szám-betű formátum és a szám nagysága is fontos, ehhez kell tartani magunkat!). Egyes rendszereken alapból létezik egy ilyen, vagy ehhez hasonló nevű fájl, és sok esetben ugyanaz a tartalma, mint az /etc/sysctl.conf fájlé. Ha létezik, akkor szerkeszd azt, ha nem létezik, akkor hozd létre.
A fájlba elég ennyit írni: vm.swappiness = 5
A fenti 5-ös érték csak példa, bármi lehet 1 és 100 között az alábbiak szerint:
- 0: újabb kernelverziók esetén (3.5 fölött) teljesen letiltja a swap-elést
- 1: a lehető legkevesebbet swapol, csak akkor, ha már muszáj
- 10: jó teljesítményt nyújthat, ha sok memóriád van
- 60: alapértelmezett érték
- 100: agresszíven swap-el
A vm.swappiness más tészta. Nekem nem a RAM → swap irány okoz fejfájást, hanem a swap → RAM. A swappiness csak az elsőre van hatással.
Közben találtam egy csúnya, manuális félmegoldást: swapoff -a; swapon -a. Ugyan lassú, és beletelik 1-2 percbe míg visszatölti a swap tartalmát memóriába, de legalább letudja egyben, miközben nyújtózom egyet vagy kimegyek WC-re.
>"swapoff -a"
Ez működhet, de azért figyelj, mert ha nem fér be minden a RAM-ba, abból lehet gond.
Ugyanazt javaslom, mint fentebb, konkrétan swappiness = 1
>"egy halom szabad memóriával 10-20 másodperceket kell várnom egy ablakváltásra"
Ez nem ugyanaz, mint a swapoff-swapon?
>"nem volt annyi esze a rendszernek, hogy a háttérben fokozatosan visszatöltse a kiswappolt adatokat"
De ha ezt tenné, akkor az lenne a baj, hogy belassul a rendszer, kéretlenül zakatol a háttértár, önállóskodik a Linux, stb.
#6 Gondolom technikailag ugyanazt csinálja a swapoff, mintha az összes process-t egyesével élesztgetném, de a fő különbség, hogy ezzel egy menetben letudom az egészet, nem szórványosan szaggat a gépem 10 másodpercekre. Benyomom, felállok a géptől, pár perc múlva visszaülök, és ismét minden gyors.
Az jogos, hogy kéretlenül nem jó ötlet az automatikus visszatöltés, de hogy egy vacak beállítás sincs rá? Biztos lehetne értelmesen is csinálni, körülményeket figyelembe véve, a jelenlegi mindent vagy semmit helyett.
Azért próbáld ki, hogy a vm.swappiness-t beállítod pl. 10-re, megnézed mit produkál, és ha jó, akkor 1-re, vagy akár egyből 1-re. Lehet, hogy a swappolás kisebb-nagyobb mértékben csökkenni fog.
Az a baj, hogy amit te szeretnél, az szembemegy a logikával. Most ugye az van, hogy kiswappeljük azokat a memórialapokat, amiket ritkán használunk, és ha lesz szabad RAM és szükség van a lapokra, akkor visszatöltjük őket. Te most azt szeretnéd, hogy a rendszer kéretlenül töltsön vissza valamit (mit is?), amint felszabadul némi RAM. Ehhez a rendszernek tudnia kellene, hogy mely lapokat lenne érdemes visszatölteni, és hogy mennyi RAM felszabadulás esetén töltögessen vissza. De a rendszer honnan tudná, hogy neked épp melyik kiswappelt memóriarész fog kelleni? És ha visszatölt valamit, de te elindítasz egy másik programot, akkor a visszatöltött részt megint csak ki kell írnia, hogy legyen hely az újonnan indított programnak.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!