Linux `free` kommando: Forstå minnebruken din!

Linux-kommandoen free gir en oversikt over hvor mye datamaskinens RAM som er i bruk, og hvor mye som fortsatt er tilgjengelig for programmer. Resultatet kan virke forvirrende i starten, men vi skal gå gjennom hvordan du tolker det.

Kommandoen «free»

Kommandoen free presenterer en rask oversikt over minnebruk i terminalen. Denne kommandoen er enkel i bruk og har ikke mange innstillinger. Likevel kan tolkningen av informasjonen være utfordrende. Det er lett å misforstå hva free faktisk forteller deg.

Dette skyldes delvis terminologien – som forskjellen mellom «ledig» og «tilgjengelig» – og delvis kjernens minnehåndtering og filsystemrutiner. Linux-kjernen vil låne ledig minne for egne formål, så lenge det ikke er behov for det andre steder. Minnet frigjøres når det trengs.

Vi skal utforske de underliggende mekanismene og databehandlingsrutinene, slik at du kan forstå hva som skjer «under panseret», og hvordan det påvirker bruken av RAM.

Kolonnene i «free»

La oss kjøre free uten tilleggsvalg og se hva vi får:

free

Resultatet kan se rotete ut i en liten terminal, men her er en mer oversiktlig tabell:

        total   used   free   shared buff/cache  available
Mem:  2038576 670716 327956    14296    1039904    1187160
Swap: 1557568 769096 788472

Tallene er oppgitt i kibibyte (KiB), som er 1024 byte. På Manjaro er kommandoen free aliaset som free -m, som bruker mebibyte (MiB), som er 1 048 576 byte. I andre distribusjoner er kibibyte standard.

Den øverste linjen viser systemminnet (RAM), mens den nederste linjen viser swap-området. Vi skal gå gjennom kolonnene mer detaljert:

Kolonne Beskrivelse
Totalt Den totale mengden installert RAM.
Brukt Mengde minne i bruk (beregnes som Total – (Ledig + Buffere + Cache)).
Ledig Mengde RAM som ikke er i bruk. (Total = Brukt + Ledig stemmer ikke alltid, forklares senere)
Delt Minne som brukes av tmpfs-filsystemet.
Buff/cache Minne brukt for buffere og cache.
Tilgjengelig Estimert mengde RAM tilgjengelig for applikasjoner og andre programmer.

For byttelinjen:

Kolonne Beskrivelse
Totalt Størrelsen på swap-partisjonen eller swap-filen.
Brukt Mengde swap-område i bruk.
Ledig Mengde swap-område som er ledig.

Bred visning

For å skille ut Buff/cache i egne kolonner, bruk -w (wide):

free -w

Her er resultatet i en tabell:

        total   used   free   shared  buffers   cache  available
Mem:  2038576 683724 265708    14660    94568  994596    1160420
Swap: 1557568 761416 796152

La oss se på hva tallene i disse kolonnene representerer.

Totalt kolonne

Dette er enkelt. Det er mengden RAM du har installert i datamaskinen. Denne verdifulle ressursen brukes av alle aktive prosesser.

Forresten, informasjonen free henter data fra finnes i filen /proc/meminfo. Du kan se på denne filen selv med:

less /proc/meminfo

Utdataene er en enkel liste med navn og verdier.

Brukt kolonne

Her begynner det å bli mer interessant.

Brukt representerer minne som er allokert til prosesser, programmer og ting som GNOME eller KDE skrivebordsmiljøer. Det inkluderer også tallene fra Buffer og Cache.

RAM som ikke brukes, er bortkastet RAM. Kjernen bruker ekstra RAM til å holde cacher og buffere for å fungere mer effektivt. Denne RAM-en er altså i bruk av kjernen, men ikke av noe i brukerrommet.

Dersom det kommer en forespørsel om minne som bare kan betjenes ved å frigjøre RAM som kjernen bruker, vil det skje sømløst. Å frigjøre denne RAM-en og bruke den til andre applikasjoner påvirker ikke systemet, men det kan påvirke ytelsen.

Denne kolonnen betyr egentlig «all RAM som er i bruk av noe, selv om den kan frigjøres umiddelbart.»

Ledig kolonne

Denne kolonnen viser mengden RAM som ikke brukes av noe. Siden kolonnen Brukt også inneholder buffer- og cache-tallene, er det normalt at velfungerende Linux-systemer har lite RAM registrert som «ledig».

Det er ikke nødvendigvis en dårlig ting og betyr at systemet regulerer minnebruken riktig. RAM brukes av applikasjoner, andre prosesser i brukerrommet og av kjernen for å forbedre ytelsen.

Delt kolonne

Delt-kolonnen representerer minne som brukes av tmpfs RAM-baserte filsystemer. Dette er filsystemer opprettet i minnet for effektiv systemdrift. For å se hvilke tmpfs-filsystemer som finnes, bruk df kommandoen.

Vi bruker disse valgene:

-h (menneskelig): Bruk passende enheter.
--total: Vis en total-linje nederst.
--type=tmpfs: Vis kun tmpfs-filsystemer.

df -h --total --type=tmpfs

Disse verdiene er ofte større enn tallet i Delt-kolonnen. Størrelsene her er de maksimale størrelsene på disse filsystemene. De bruker bare den mengden minne de trenger. Tallet i Delt-kolonnen er det korrekte tallet for minnebruk.

Hva finnes i disse filsystemene? Her er en rask oversikt:

Filsystem Beskrivelse
/run Inneholder midlertidige filer som PID-filer, systemd-logging, informasjon om Unix-domene sockets, FIFOer, og håndtering av demoner.
/dev/shm Tillater implementering av POSIX-kompatibel minnehåndtering på Debian og Debian-baserte Linux-distribusjoner.
/run/lock Inneholder låsefiler som indikerer om en fil eller annen delt ressurs er i bruk. Inneholder PID for prosessen som bruker ressursen.
/sys/fs/cgroup Hovedelement i ordningen som administrerer kontrollgrupper. Prosesser organiseres i hierarkiske grupper etter ressursbruk, noe som muliggjør overvåking og begrensning av ressursbruk.
/run/user/121 Mappe opprettet av pam_systemd for å lagre midlertidige filer for en bruker (her med ID 121). «Brukeren» kan være en vanlig bruker, en demon eller annen prosess.
/run/user/1000 Mappe opprettet av pam_systemd for å lagre midlertidige filer for brukeren med ID 1000. Dette er den aktuelle brukeren (f.eks. dave).

Buffer- og Cache-kolonnene

Disse kolonnene vises bare med -w. Uten -w blir de slått sammen i Buff/cache-kolonnen.

Disse minneområdene samhandler og er avhengige av hverandre. Buffer-området inneholder data lest fra harddisken. Det oppbevares i tilfelle det er behov for det igjen. Det er raskere å hente data fra bufferen enn å lese fra harddisken. Cache kan også inneholde data som er endret, men ikke skrevet tilbake til harddisken, eller verdier som er beregnet og ikke lagret i en fil.

For å holde oversikt over filfragmenter, bygger kjernen en indeks for bufferminneområdet. Buffere er deler av minnet som inneholder diskblokker og annen informasjonsstruktur. De inneholder data om dataene som er lagret i Cache-minneområdet. Bufferne er altså metadata for cachen.

Når en fil leses, søker kjernen i bufferdatastrukturene etter filen eller filfragmentet. Hvis det finnes, hentes det fra bufferminneområdet. Hvis det ikke finnes, leses filen fra harddisken.

Strukturene i bufferminneområdet er:

Struktur Beskrivelse
Bufferhoder Hver buffer beskrives i en datablokk kalt et bufferhode. Hvis dataene i blokken endres og minnesiden blir «skitten», spores behovet for å skrive dataene tilbake til harddisken.
Inoder Inoder inneholder metadata om filer og kataloger, inkludert plassering på harddisken (eller det virtuelle filsystemet), filstørrelse og tidsstempler.
Dentries En dentry (katalogoppføring) er en struktur som inneholder katalogoppføringsinformasjon. Se for deg dette som en liste over inoder for filer og kataloger i en katalog.

Det er logisk å slå sammen minnet som brukes av buffer og cache til en Buff/cache-kolonne. De er to deler av samme helhet. Bufferminneområdet ville vært ubrukelig uten bufferminneområdet som gir en indeks til innholdet.

Tilgjengelig kolonne

Tilgjengelig er summen av Ledig pluss deler av Buffer og Cache (eller Buff/cache) som kan frigjøres umiddelbart. Tilgjengelig er et estimat, ikke et eksakt tall, men et informert og nøyaktig estimat.

Endre skjermenheter

For å endre enhetene som free viser tallene i, bruk disse valgene:

Valg Beskrivelse
-b Vis verdier i byte.
-k Vis verdier i kibibyte (standard).
-m Vis verdier i mibibyte.
-g Vis verdier i gibibyte.
-h Vis verdier i passende enheter (menneskelig lesbart).

For å bruke menneskelig lesbare enheter, bruk -h:

free -h

free bruker passende enheter for hver verdi, som MiB og GiB.

Vis en totalsum

Valget --total fører til at free viser en total-linje som summerer Total, Brukt og Ledig for Mem og Swap-linjene.

free -h --total

Antallvisninger

Valget -c (count) forteller free å kjøre et visst antall ganger, med ett sekunds pause mellom hver visning. For å kjøre free to ganger, bruk:

free -h -c 2

Kjøre «free» kontinuerlig

For å se effekten en applikasjon har på minnebruken, kan det være nyttig å ha free kjørende kontinuerlig. Du kan da starte, bruke og lukke programmet mens du ser på free i terminalen.

Valget -s (sekunder) bestemmer pausen mellom hver free-kjøring. For å kjøre free kontinuerlig med tre sekunders pause, bruk:

free -s 3

Trykk Ctrl+C for å stoppe prosessen.

Kombinere «count» og «seconds»

For å kjøre free med en pause mellom hver visning, og stoppe etter et visst antall rapporter, kombiner -s og -c. For å kjøre free fem ganger med to sekunders pause, bruk:

free -s 2 -c 5

Etter at fem oppdateringer har dukket opp, stopper prosessen og du får tilbake ledeteksten.

Skille lavt og høyt minne

Dette er mindre nyttig i dag, men for Linux på en 32-bits datamaskin kan det være nyttig. Det skiller minnebruken mellom lavt og høyt minne.

På et 32-bits Linux-system kan CPUen adressere maksimalt 4 GB minne. Minnet deles i lavt og høyt minne. Lavt minne kartlegges direkte til kjernens adresseområde. Høyt minne har ingen direkte kjernetilknytning og er vanligvis over 896 MB.

Kjernen kan bare bruke lavt minne, mens brukerprosesser kan bruke både lavt og høyt minne.

På en 64-bits datamaskin vises ingen verdier for høyt minne:

free -h -l

Oppsummering

En rask oppsummering:

Kolonne Beskrivelse
Totalt Mengde RAM installert i systemet.
Brukt Lik Total – (Ledig + Buffere + Cache).
Ledig Mengde minne som ikke er i bruk.
Delt Minne brukt av tmpfs-filsystemer.
Buffer Datastrukturer for å gi en indeks for alt som er lagret i Cache.
Cache Data lest fra harddisk, endret data som venter på å bli skrevet tilbake, og andre beregnede verdier.
Tilgjengelig Estimert mengde minne i Ledig, Buffer og Cache som kan brukes til en minneforespørsel.