- Linux bruker all tilgjengelig RAM til mellomlagring og sidebuffer, så lite ledig minne betyr ikke nødvendigvis at det er et problem.
- Kombinasjonen av swap, zram/zswap og en riktig innstilling av vm.swappiness lar deg balansere ytelse og stabilitet.
- cgroup v2, systemd-oomd og verktøy som earlyoom eller nohang gir fin kontroll over minnetrykk og OOM-hendelser.
- Overvåking med free, vmstat, htop, sar eller Glances er nøkkelen til å oppdage flaskehalser og optimalisere minnehåndtering.

Hvis du administrerer systemer, jobber med containere eller vedlikeholder produksjonsservere, er en grundig forståelse av minnehåndtering i Linux ikke lenger valgfritt. Det er forskjellen mellom en server som håndterer belastningstopper uten å vike, og en som sliter, går i «thrashing mode» eller ender opp med å aktivere den fryktede OOM-killeren på verst tenkelig tidspunkt.
Linux er designet for å bruke RAM så effektivt som mulig: det mellomlagrer filer, komprimerer sider, flytter data til swap og prioriterer prosesser i henhold til svært presise retningslinjer. Utenfra kan det virke som om det "bruker mye minne" eller at "det aldri er ledig RAM", men i virkeligheten prøver det å levere maksimal ytelse og stabilitet . La oss se, trinn for trinn og med litt "lavteknologisk" forklaring, hvordan alt dette fungerer og hvordan du kan finjustere det på avanserte måter.
Grunnleggende konsepter og myter om minne i Linux

Før du tukler med kjerneparametere eller monterer zram som om det ikke finnes noen morgendag, er det lurt å ha noen klare ideer om minnetyper, arkitektur og hvordan systemet ser RAM.
Den maksimale mengden fysisk minne en datamaskin kan håndtere bestemmes av operativsystemet og prosessorarkitekturen. Et 32-bits system er vanligvis begrenset til 4 GB RAM, mens et 64-bits system enkelt kan håndtere titalls eller hundrevis av gigabyte (teoretisk sett mye mer, selv om den faktiske grensen er satt av maskinvaren).
I Linux administreres alt minne som virtuelt minne . Dette inkluderer både fysisk RAM og swap-plass. RAM kan ikke "strekkes" bortsett fra ved å legge til fysiske moduler, men virtuelt minne kan utvides ved hjelp av disk (partisjoner eller swap-filer) og avanserte mekanismer som zram eller zswap.
La fysisk minne (RAM) Det er den raske og dyre ressursen: det er der prosesser, biblioteker, filbuffere, I/O-buffere, delt minne osv. lastes inn. Linux har en veldig klar filosofi: hvis det er ledig RAM, er det bedre å bruke det som en buffer og øke hastigheten på tilgangen enn å la det stå tomt. Det er derfor det å se lite "ledig" minne i verktøy som free Det betyr ikke at du har et problem.
Diskminne ( vedvarende lagring) er mye tregere. Mens RAM reagerer på nanosekunder, reagerer selv en SSD på mikrosekunder eller millisekunder. Det er derfor systemet prøver å holde ofte brukte data i RAM og bare tyr til disken når det er absolutt nødvendig: lasting av kjørbare filer, lesing av kalde data eller bytte av sider.
Virtuelt minne, sider og interne kjernestrukturer
Virtuelt minne er mekanismen som Linux bruker for å gi hver prosess sitt eget isolerte og beskyttede adresserom . Maskinvaren og kjernen oversetter virtuelle adresser til fysiske adresser gjennom strukturer kalt sidetabeller.
Den minste enheten som brukes til å administrere minne er siden , vanligvis 4 KB. Hele det virtuelle minnesystemet dreier seg om sider: de blir allokert, frigjort, byttet, mellomlagret og merket med forskjellige tillatelser (skrivebeskyttet, utførbar osv.).
Sidetabeller er hierarkiske strukturer som vedlikeholdes av kjernen. De lagrer, for hver virtuelle side i hver prosess, plasseringen til den faktiske fysiske siden (hvis den finnes), dens tillatelser og dens nåværende tilstand. Denne oversettelsen gjør det mulig å isolere prosesser, dele sider mellom dem og kartlegge filer direkte i minnet.
Når en prosess åpner en gyldig adresse, men siden ikke er klar for tilgang, oppstår en sidefeil . Denne kan være lett (siden er i RAM, men i en tilstand som krever oppdatering) eller dyr (siden er på disk, i en swap eller i en fil, og må bringes inn i RAM). Hvis sidefeil blir hyppige, blir systemet tregere fordi det bruker for mye tid på å lese fra disk.
Sidebufferen er mellombufferen til filsider som vedlikeholdes av kjernen. Den lagrer data og metadata for filer og mapper for å redusere disktilgang. Dette er en av grunnene til at Linux «ser ut til» å bruke all RAM-en: i virkeligheten utnytter den minne som applikasjoner ikke aktivt bruker for å øke hastigheten på disktilgangen.
Typer minne: filbasert, anonymt, og hvordan de forholder seg til swap
I Linux skilles det vanligvis mellom filminne og anonymt minne . Begge ligger i RAM, men opprinnelsen og mulig sikkerhetskopiering til disk er forskjellig.
Samtalen filminne Det er den som sikkerhetskopieres av systemfiler: kjørbare binærfiler, delte biblioteker, tilordnede data med mmap fra en fil, osv. Det minnet kan forkastes og lastes inn på nytt fra den opprinnelige filen hvis det er behov for plass.
La anonymt minne Det er alt prosessen reserverer som ikke er knyttet til en fil: den dynamiske heapen, stakken, private regioner med MAP_ANONYMOUSog områdene som er kopiert av kopier-ved-skriving når du gjør det fork()Dette minnet finnes bare i RAM (eller i swap, hvis det flyttes), og dets eneste mulige sikkerhetskopi er nettopp den swap-plassen.
Når kjernen trenger å frigjøre RAM, vil den først prøve å frigjøre sider som den kan sette sammen på nytt: vanligvis sider fra sidebufferen eller filbaserte regioner. Først når det ikke er mer plass eller minnetrykket er veldig høyt, begynner den å skyve anonymt minne inn i swap , noe som er mye dyrere, men gir systemet en pause.
Minnepress, juling og OOM-dreper
Minnepress oppstår når antallet ledige sider faller under visse interne terskler. Kjernen blir deretter tvunget til å konstant jobbe for å frigjøre minne: tømme mellomlagringer, skrive skitne sider til disk, fjerne sjelden brukte sider og så videre.
Høyt minnetrykk kan gi svært tydelige symptomer: høy latens i webtjenester , trege grafiske grensesnitt, forsinkede responser fra eksterne økter (SSH, VNC, RDP), hakkete mus, vinduer som tar sekunder å reagere, osv. På det tidspunktet er systemet mer fokusert på å overleve enn på å gjøre nyttig arbeid.
"Thrashing" skjer når RAM-en ikke er tilstrekkelig til å holde sidene som prosesser bruker konstant. Kjernen begynner å bytte sider kontinuerlig: den fjerner én for å sette inn en annen, men trenger deretter umiddelbart den den nettopp fjernet. Resultatet er en syklus av sidefeil og disktilgang som forringer ytelsen.
Med swap aktivert betyr thrashing at anonyme sider flyttes frem og tilbake mellom RAM og swap-plassen, noe som metter disken. Uten swap flyttes problemet til filsidene: de blir forkastet og lastet inn på nytt gjentatte ganger fra filsystemet, noe som også kan gjøre maskinen praktisk talt ubrukelig.
Hvis kjernen fortsatt ikke klarer å få ledig minne, gjelder følgende: Mekanisme for tomt minne (OOM)Når alt som kan slettes, komprimeres eller byttes er brukt opp, beregner kjernen en poengsum for hver prosess (oom_scoreog bestemmer hvilken som skal ofres. Den prosessen fullføres av OOM-morder for å frigjøre en betydelig mengde RAM og unngå en totalkrasj.
Bytte: hva det er, hvor mye man skal legge i og hvorfor det ikke er "djevelen"
Swap-minne har et dårlig rykte, delvis på grunn av utdaterte råd og overforenklinger som "hvis du har mye RAM trenger du ikke swap." I virkeligheten er swap-plass en nøkkelkomponent i Linux-minnedesign, selv på systemer med mye RAM.
Swap er et område på disken (partisjon eller fil) som kjernen bruker til å lagre inaktive minnesider . Dette lar den frigjøre RAM for prosesser som faktisk trenger det. Det er ikke virtuelt minne i seg selv, men en av mekanismene som gjør det mulig.
Uten swap har anonyme sider ingen steder å gå når minnebelastningen øker. Kjernen kan fortsatt stole på mellomlagring og filbaserte sider, men så snart anonymt minne blir kritisk høyt, er den praktisk talt tvunget til å aktivere OOM-killeren mye raskere. Teknisk sett kan Linux fungere uten swap, men i praksis er det en unødvendig risiko i de fleste scenarier.
Når det gjelder størrelsen på bytteplassen, finnes det ingen enkelt oppskrift, men det finnes noen ganske rimelige moderne kriterier avhengig av maskinens rolle:
- Servere uten dvalemodus4–8 GB med swap-plass er vanligvis tilstrekkelig som buffer, selv med mye RAM. For minneintensive tjenester (databaser, virtualisering) kan du øke den til 1,5 ganger RAM-en, men prioriteten bør være å øke fysisk RAM.
- Stasjonære datamaskiner uten dvalemodusMed 16 GB eller mer RAM er 2–4 GB swap mer enn nok som et sikkerhetsnett.
- Dvalemodusaktiverte enheterSwap-plassen må være lik eller litt større enn RAM-en, fordi systemet dumper alt innholdet i minnet til den når det går i dvalemodus.
Det er svært fleksibelt å opprette en vekslingsplass. Du kan bruke en dedikert partisjon eller en vekslingsfil . En vekslingsfil er ideell når disken din allerede er partisjonert, eller du vil justere størrelsen uten å konfigurere hele systemet på nytt.
Minnemålinger: gratis, vmstat, ps, RSS, PSS og mer
Klassiske Linux-minnehåndteringsverktøy kan føre til feiltolkninger hvis du ikke vet hva hver kolonne betyr. Kommandoen free -h Det er den enkleste måten å raskt se totalt minne, brukt minne, ledig minne, hurtigbuffer og swap.
Ved utgangen av free Det er viktig å se på linjen som trekker fra buffere og hurtigbuffer, fordi den kolonnen indikerer minne som faktisk brukes av prosesser, uten å telle med hva kjernen bruker som hurtigbuffer og som den raskt kan frigjøre om nødvendig.
med vmstat -s -S M Du får en mer detaljert oppsummering: totalt minne, brukt minne, ledig minne, aktivt minne, inaktivt minne, swap-buffer osv. Du kan også se /proc/meminfo for å se hver beregning i detalj, selv om resultatet er tørrere og mindre brukervennlig.
For å finne ut hvilke prosesser som påvirker RAM mest, ps aux viser kolonner som VSZ (totalt virtuelt minne som prosessen kunne bruke hvis den lastet inn alt) og RSS (Resident Set Size, faktisk minne i RAM). Merk: RSS inkluderer også delt bibliotekminne, som telles flere ganger hvis det brukes av flere prosesser.
Her kommer inn i bildet PSS (proporsjonal settstørrelse)som fordeler kostnadene for delte biblioteker mellom prosessene som bruker dem. For å enkelt få tak i PSS finnes det verktøy som smem, veldig nyttig for å se hvilke applikasjoner som virkelig er "datasvin" uten å forvrenge dataene på grunn av delte biblioteker.
Minnefragmentering, stakk, heap og ulimit
Et annet mindre synlig aspekt ved minnehåndtering er fragmentering . Vi kan snakke om intern fragmentering (når avrundede blokker allokeres i multipler på 4, 8 eller 16 byte, slik at en ubrukelig del blir igjen) og ekstern fragmentering (når ledig minne finnes, men er delt inn i små biter som forhindrer bruk av en stor sammenhengende allokering).
I applikasjoner som Redis vil du noen ganger se forskjeller mellom minnet som rapporteres av systemet (RSS) og minnet som appen selv anser som nyttig (used_memory). Denne avstanden skyldes vanligvis i stor grad ekstern fragmentering, hull som systemet teller som okkupert, men som prosessen faktisk ikke bruker.
Minnet om en prosess er konseptuelt delt inn i stabel og haugStakken brukes til lokale variabler og funksjonskall, mens heapen brukes til dynamiske allokeringer. malloc() og lignende. Når datastrukturer vokser utover det stakken kan romme, blir de hentet fra heapen og håndtert ved hjelp av pekere.
Maksimal stakkstørrelse per prosess kan justeres med ulimit -a og systemkonfigurasjoner. Å redusere den begrenser antallet store lokale variabler, mens å øke den tillater flere variabler eller dyp rekursjon. Justering av denne parameteren kan bidra til å kontrollere minnebruken bedre og redusere visse typer fragmentering, selv om det ikke er en universalmiddel.
Avansert overvåking og diagnostikk: top, htop, vmstat, sar og mer
For å finne prosesser som bruker RAM, kan du starte med top Og hvis du ønsker noe mer brukervennlig, med htopSistnevnte viser CPU-, minne- og swap-brukslinjer, og tillater interaktiv sortering og filtrering av prosesser.
I Debian og derivater, installer htop med sudo apt install htopI AlmaLinux og andre Red Hat-lignende systemer, med sudo dnf install htopNår du er inne, kan du sortere etter minne, søke etter spesifikke prosesser og avslutte problematiske oppgaver direkte fra grensesnittet.
For dypere analyse og batchmodus, vmstat 5 Den gir regelmessig informasjon om prosesser, minne, paging, blokk-I/O, avbrudd og CPU-planlegging. Den er ideell for å se hvordan minnetrykket utvikler seg over tid.
Fortsettelsen sysstat Den inkluderer verktøy som sarsom lar deg registrere og analysere bruken av minne og andre ressurser. For eksempel, sar -r 1 5 Den viser minne- og swap-bruk hvert sekund, fem ganger. På Debian installeres den med sudo apt install sysstatog i AlmaLinux med sudo dnf install sysstat.
Hvis du trenger dyp feilsøking på kjernenivå, bpftrace Det er et kraftig verktøy basert på eBPF. Det lar deg instrumentere systemkall, observere minnetilgang og oppdage flaskehalser uten å kompilere på nytt eller starte på nytt. Det installeres vanligvis med sudo apt install bpftrace på Debian-lignende systemer.
Praktisk minnehåndtering: swap, swappiness og hurtigbufferrensing
En grunnleggende oppgave på mange servere er å sjekke nåværende status for byttet. Med swapon --show Du har en liste over aktive bytteenheter og filer, samt størrelse, type og prioritet. Hvis du trenger å legge til byttefiler på farten, kan du opprette en fil med fallocate, sikre tillatelser med chmod 600formater den med mkswap og aktiver den med swaponFor å gjøre den permanent, legg ganske enkelt til den tilsvarende oppføringen i /etc/fstab.
Parameter vm.swappiness Dette kontrollerer hvor lett kjernen prioriterer å bruke swap fremfor å fortsette å fylle RAM. Det går fra 0 til 100. Lave verdier (10–20) fører til at systemet unngår swap inntil det er absolutt nødvendig, mens høye verdier (60 eller mer) oppmuntrer systemet til å flytte sider for å bytte lettere for å opprettholde ledig RAM.
På servere med trege disker eller store databaser er det ofte av interesse senk bytteforholdetFor eksempel til 10 eller 20, med sudo sysctl vm.swappiness=10For stasjonære datamaskiner med rask zram eller SSD-er kan mellomverdier som 30–60 gi en god balanse mellom latens og minneutnyttelse.
I situasjoner med god hukommelse er det noen ganger nødvendig å tvinge frem hurtigbufferutgivelse med sudo sync && sudo sysctl -w vm.drop_caches=3Dette tømmer en stor del av sidens mellomlagring og minne. Det er nyttig av og til for testing eller frigjøring av minne på svært begrensede systemer, men det bør ikke brukes rutinemessig fordi du også mister ytelsesforbedringen som mellomlagring gir.
Avanserte kontrollverktøy: cgroup v2, memory.pressure og OOM i brukerområdet
I moderne systemer som bruker systemd og cgroup v2 , kan minnehåndtering finjusteres av prosessgrupper. cgroup v2 organiserer oppgaver i hierarkier og anvender ressursgrenser og prioriteringer (CPU, minne, I/O) på gruppenivå, ikke bare på det individuelle prosessnivået.
Innenfor minnehierarkiet, parametere som memory.low De lar deg indikere at minnet til visse c-grupper bør beskyttes bedre mot globalt press, mens andre kan være mer brukbare hvis RAM må frigjøres.
Filen memory.pressure Den avslører svært nyttige målinger: hvor lenge oppgaver i den c-gruppen har vært blokkert på grunn av mangel på minne, i intervaller på 10, 60 og 300 sekunder. Varianten noen Den indikerer om minst én oppgave har blitt forsinket, og fullt Det gjenspeiler øyeblikk der alle gruppens oppgaver ble påvirket samtidig.
I tillegg til kjernens OOM-killer har det dukket opp brukerromsløsninger som tidlig morgen, ingen hengende o systemd-oomdEarlyOOM overvåker RAM og swap, og når de faller under visse terskler, avslutter den proaktivt prosesser. oom_score høyere, noe som gjenoppretter brukervennligheten før maskinen fryser.
NoHang går et skritt videre: den støtter flere utvalgskriterier , kan ta hensyn til minnetrykk og integreres godt med avanserte konfigurasjoner, selv om utviklingen har hatt sine oppturer og nedturer. Samtidig integreres systemd-oomd direkte med systemd og cgroup v2, og er for tiden det foretrukne alternativet i mange distribusjoner for å håndtere situasjoner med lite minne mer intelligent og detaljert.
Modern Swap: zram, zswap og enhetsprioriteter
I tillegg til "klassisk" diskbytting, tilbyr Linux moderne mekanismer som forbedrer ytelsen betraktelig ved å kombinere RAM-komprimering og selektiv diskbruk.
zram er en kjernemodul som lager blokkenheter i selve RAM-en, der sider lagres i komprimert tilstand. Disse brukes vanligvis som ultrasnelle bytteenheter: komprimering og dekomprimering bruker noe CPU, men du får logisk minnekapasitet og reduserer diskbruken drastisk.
I mange distribusjoner er det nok å installere zram-verktøy o zram-generator og aktivere tjenesten. For eksempel, i Debian kan du bruke sudo apt install zram-tools og aktivere zramswap med systemd. I AlmaLinux, med sudo dnf install zram-generator og tilhørende tjeneste.
zswap , derimot, fungerer som en komprimert hurtigbuffer foran diskbyttet . Den prøver først å lagre byttede sider i komprimert RAM; først når denne hurtigbufferen er full eller sider blir inaktive, skriver den til det faktiske bytteområdet. Dette reduserer disk-I/O og forlenger levetiden til SSD-er, på bekostning av noe CPU-bruk.
Når du kombinerer flere bytteenheter (f.eks. zram og en diskfil), er det viktig å justere prioriteringer. Med swapon -p eller alternativet pri= en /etc/fstab Du spesifiserer hvilken enhet som skal brukes først. Vanlig praksis er å gi høy prioritet (for eksempel 100) til zram og lavere prioritet (10) til diskswap, slik at kjernen utnytter den komprimerte swap-plassen i RAM fullt ut før den får tilgang til disken.
Minnehåndtering anvendt på servere: swap, tjenester og sikkerhet
I webservere (Apache, Nginx), databaser (MySQL, MariaDB, MongoDB) eller ressurskrevende applikasjoner er minne den kritiske ressursen. RAM og swap-konfigurasjon avgjør direkte hvor mange samtidige forespørsler du kan håndtere før systemet begynner å slite.
Når det gjelder databasemotorer som MongoDB, er det avgjørende at den fysiske RAM-en overstiger databasens krav ; ellers vil den begynne å bruke swap-plass, og ytelsen vil synke kraftig på grunn av den betydelige forskjellen mellom RAM-tilgang og disktilgang. Det samme gjelder MySQL/MariaDB, der verktøy som MySQLTuner anbefaler minneparametere basert på tilgjengelig RAM.
For å unngå å sløse med minne, anbefales det å stoppe ubrukte tjenester og rydde opp i containere, bilder og Docker-volumer som ikke lenger er nødvendige. I utviklings- og QA-miljøer er det veldig enkelt å samle glemte ressurser som stjeler gigabyte med RAM og diskplass uten at noen merker det.
Sikkerhet spiller også en rolle: unødvendige porter åpne De øker angrepsflaten. Skadelig programvare som klarer å infiltrere et system kan for eksempel starte miningprosesser som bruker CPU og minne, planlegge oppgaver i crontab og krasje systemet. Å sjekke innkommende og utgående porter, lukke alt som ikke er viktig og rydde opp i mistenkelige cron-jobber er en del av grunnleggende systemhygiene som også beskytter minneressurser.
Minne og filsystemer: ext4, XFS, Btrfs og journalføring
Selv om det kan virke som et separat problem, påvirker valg av filsystem og konfigurasjon også minneoppførsel og I/O-belastning. Ext4 bruker for eksempel en journal som, avhengig av belastningen, kan legge ekstra press på disken og dermed på hurtigbufferhåndteringen.
I krevende servermiljøer velger mange administratorer XFS eller til og med Btrfs . XFS fungerer vanligvis veldig bra med store filer og systemer med høy ytelse. Btrfs tilbyr avanserte funksjoner som snapshots, transparent komprimering og delvolumer, på bekostning av en viss kompleksitet og, avhengig av versjon og distribusjon, et modenhetsnivå som fortsatt diskuteres for alle arbeidsbelastninger.
Kjernen tilpasser sin mellomlagrings- og tilbakeskrivningspolicy til filsystemets egenskaper, så bytte fra ext4 til XFS eller Btrfs påvirker ikke bare rå I/O, men også hvordan RAM og sidebuffer brukes til å bufre lese- og skriveoperasjoner.
Viktige grafiske verktøy og hjelpeprogrammer for administratorer
Selv om terminalen fortsatt er den sveitsiske lommekniven til enhver administrator, finnes det verktøy som gjør det mye enklere å administrere minne og ressurser . Et av dem er Glances , en sanntidsmonitor som viser CPU, minne, disk, nettverk og prosesser på én skjerm, med et valgfritt webgrensesnitt for overvåking av flere servere fra en nettleser.
For rask installasjon på Debian, rett og slett... sudo apt install glancesBlikk komplementerer veldig godt htop, vmstat y sar, noe som gir en mer visuell oversikt over hvordan systemet oppfører seg under belastning.
Innen grafisk serveradministrasjon tilbyr Cockpit et brukervennlig webgrensesnitt for overvåking av minne, prosesser og tjenester . Det lar deg administrere flere servere fra én konsoll, starte og stoppe systemd-enheter, overvåke bruk av swap og zram, og gjennomgå logger uten å forlate nettleseren.
På stasjonære systemer integrerer mange distribusjoner sin egen ressursmonitor, men for miljøer uten et GUI eller der du ønsker noe lett, gir kombinasjonen av disse konsollverktøyene med tilpassede skript deg utmerket innsikt i hva som skjer med minnet til enhver tid.
Riktig minnehåndtering i Linux innebærer å forstå hvordan kjernen bruker RAM, rollene til swap, zram og zswap, hvordan cgroup v2 og de ulike OOM-ene reagerer på press, og hvilke verktøy du har for å overvåke og finjustere systemet. Når du setter alle disse delene sammen – fra free, vmstat, PSS og memory.pressure til zram, swappiness og systemd-oomd – slutter du å slite med at "Linux forbruker RAM" og begynner å ha et finjustert, stabilt system som er i stand til å maksimere maskinvareytelsen i enhver rolle: server, skrivebord eller miljø med høy belastning.