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. |