Hur man använder det kostnadsfria kommandot på Linux

Kommandot Linux gratis visar hur mycket av din dators minne som används och hur mycket som fortfarande är tillgängligt för program att använda. Dess utdata kan vara förvirrande för den oinvigde, men vi ska visa dig hur du förstår det.

Det fria kommandot

Kommandot gratis skriver ut en snabb sammanfattning av minnesanvändningen i ett terminalfönster. Det har inte många alternativ eller lurar upp ärmarna, och det tar inte mycket tid eller ansträngning att lära sig hur man använder den. Att lära sig att korrekt tolka informationen den ger är dock en annan historia. Det är för lätt att bli förvirrad av vad gratis säger dig.

Dels beror detta på terminologi – som skillnaden mellan ”gratis” och ”tillgänglig” – och dels på det inre arbetet i minnet och filsystemshanteringsrutinerna i Linuxkärnan. Om du har ledigt minne som kärnan kan dra nytta av, kommer den att låna det för sina egna syften. Tills du behöver tillbaka den.

Vi kommer att ta ett dyk ner i de underliggande mekanismerna och datarutinerna så att du kan uppskatta vad som händer under huven och hur allt det påverkar användningen av din random access minne (BAGGE).

De fria kolumnerna

Låt oss starta gratis utan alternativ och se vad vi får:

free

Det är inlindat på ett fult sätt. På din dator kommer du att kunna sträcka ut terminalfönstret. Här är resultatet i en snyggare tabell:

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

Siffrorna anges i kibibyte, som är 1024 byte. På Manjaro är gratiskommandot alias som free -m. Detta tvingar fri att använda mebibyte, som är 1 048 576 byte. På andra distributioner är standarden kibibyte.

Den översta raden rapporterar om systemminnet, den nedersta raden rapporterar om bytesutrymme. Vi presenterar kolumnerna här, och tittar sedan närmare på dem inom kort. Kolumnerna för minnesraden är följande:

Totalt: Den totala mängden fysiskt RAM-minne som är installerat i din dator.
Används: Detta beräknas av Total-(Free+Buffers+Cache).
Ledigt: Mängden oanvänt minne. Varför fungerar inte Total=Used+Free? Vi ska förklara det snart.
Delat: Minne som används av filsystemet tmpfs.
Buff/cache: Minne som används för buffertar och cache.
Tillgängligt: ​​Detta är en uppskattning av det minne som är tillgängligt för serviceminnesförfrågningar från applikationer, annan fungerande programvara i din dator, till exempel din grafiska skrivbordsmiljö och Linux-kommandon.

För växlingsraden är kolumnerna:

Totalt: Storleken på växlingspartitionen eller växlingsfilen.
Används: Mängden bytesutrymme som används.
Gratis: Det återstående (oanvända) bytesutrymmet

Den breda displayen

För att separera Buff/cache-figurerna i sina egna kolumner, använd alternativet -w (wide):

free -w

Detta är resultatet. Istället för en Buff/cache-kolumn får vi en Buffers-kolumn och en Cache-kolumn. Här är siffrorna i en tabell:

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

Låt oss se vad siffrorna i kolumnerna representerar.

Den totala kolumnen

Detta är den enkla. Det är hur mycket RAM-minne du har installerat på ditt moderkort. Detta är den värdefulla resursen som alla pågående processer slåss om. De skulle åtminstone slåss om kärnan inte dömde.

För övrigt är platsen där free samlar sin information från pseudofilen /proc/meminfo. Du kan själv ta en titt på den här filen med följande kommando:

less /proc/meminfo

Utdata är en enda lista med namn och värden.

Den begagnade kolumnen

Det är här det börjar bli intressant.

Den begagnade figuren representerar vad du förmodligen förväntar dig, plus en massa andra saker. Detta är minnet som allokeras till processer, tas av användarprogram och används av saker som GNOME eller KDE skrivbordsmiljöer. Inga överraskningar där. Men det inkluderar också Buffers och Cache-figurerna.

RAM som inte används till något är bortkastat RAM. Kärnan använder extra RAM för att hålla cacher och buffertar som gör att den kan fungera mer effektivt. Så detta RAM-minne används för något av kärnan, men inte av något i användarutrymme.

Om en begäran om minne tas emot som bara kan betjänas genom att avstå från en del av RAM-minnet som kärnan använder för sina egna enheter, så är det vad som händer, sömlöst. Att frigöra detta RAM-minne och använda det för andra applikationer kommer inte att påverka korrekt drift av ditt Linux-system—ingenting kommer att gå sönder—men det kan påverka systemets prestanda.

Så den här kolumnen betyder egentligen ”allt RAM som används av något, även om det kan återvinnas direkt.”

Den fria kolumnen

Den här kolumnen innehåller siffran för mängden RAM som inte används av någonting. Eftersom kolumnen Used innehåller buffertar och cache-siffror är det inte ovanligt att perfekt fungerande Linux-system har väldigt lite RAM-minne som anges som ”gratis”.

Det är inte nödvändigtvis en dålig sak, och betyder nästan säkert att du har ett helt normalt fungerande system som reglerar användningen av RAM korrekt. Det vill säga, RAM-minnet används av applikationer och andra processer för användarutrymme och av kärnan i dess ansträngningar att göra din dators prestanda så bra som möjligt.

Den delade kolumnen

Siffran i kolumnen Delad representerar minne som ägnas åt att hålla tmpfs RAM-baserade filsystem. Dessa är filsystem som skapas i minnet för att underlätta en effektiv funktion av operativsystemet. För att se vilka tmpfs-filsystem som finns, använd df kommando.

Alternativen vi använder är:

-h (människa): Använd förnuftiga enheter som passar bäst.
–total: Visa en rad med totalsummor längst ner på utdata.
–type=tmpfs: Rapportera endast om tmpfs-filsystemen.

df -h --total --type=tmpfs

Det första som slår dig när du tittar på dessa värden är att de är många gånger större än siffran i kolumnen Delad. Storlekarna som visas här är de maximala storlekarna för dessa filsystem. I verkligheten upptar de bara så mycket minne som de behöver. Siffran i kolumnen Delad är den man ska tro för minnesanvändning.

Vad rymmer dessa filsystem? Här är en snabb sammanställning:

/run: Detta innehåller många temporära filer som t.ex PID-filer, systemd journalföring som inte behöver bevaras över omstarter, information att göra med Unix-domänsockets, FIFOsoch förvaltningen av demoner.
/dev/shm: Detta tillåter implementering av POSIX-kompatibel minneshantering på Debian och Debian-härledda Linux-distributioner.
/run/lock: Detta innehåller låsfiler. Dessa används som indikatorer för att låta systemet veta att en fil eller annan delad resurs används. De innehåller processens PID använder den resursen.
/sys/fs/cgroup: Detta är en central del av schemat som hanterar kontrollgrupper. Processer är organiserade i hierarkiska grupper efter vilken typ av resurser de använder. Det gör det möjligt att övervaka och begränsa processernas användning av resurserna.
/run/user/121: Detta är en mapp skapad av pam_systemd för att lagra temporära filer för en användare. I det här fallet har användaren ett ID på 121. Observera att ”användaren” kan vara en vanlig användare, en demon eller någon annan process.
/run/user/1000: Detta är en mapp skapad av pam_systemd för att lagra temporära filer för denna användare, som har användar-ID på 1000. Detta är den nuvarande användaren, användaren dave.

Buffert- och Cache-kolumnerna

Buffert- och Cache-kolumnerna visas bara om du har använt -w (wide). Utan alternativet – w kombineras siffrorna från dessa två kolumner till kolumnen Buff/cache.

Dessa två minnesområden interagerar och är beroende av varandra. Cacheområdet innehåller (främst) data som har lästs från hårddisken. Den behålls om du behöver komma åt den igen. Det går snabbare att göra det genom att hämta data från cachen än att läsa tillbaka dem från hårddisken. Cachen kan också innehålla data som har modifierats men ännu inte skrivits tillbaka till hårddisken, eller värden som har beräknats och ännu inte sparats i en fil.

För att hålla reda på de olika filfragmenten och dataförråden bygger kärnan ett index till cacheminnesområdet, i buffertminnesområdet. Buffertar är delar av minnet som innehåller skivblock och andra informationsstrukturer. Dessa innehåller data om data som finns i cacheminnesområdet. Så buffertarna är metadata för cachen.

När en filläsningsbegäran görs läser kärnan data i buffertdatastrukturerna och letar efter filen eller filfragmentet som har begärts. Om den hittas, betjänas begäran från cacheminnesområdet som pekas på av buffertdatastrukturerna. Om den inte finns i cachen – och det inte heller i metadatan i buffertminnesområdet – läses filen från hårddisken.

Strukturerna i buffertminnesområdet är:

Bufferthuvuden: Varje buffert beskrivs i en datablock som kallas ett bufferthuvud. Dessutom, om data i blocket ändras och den tillhörande minnessidan ”smutsad”, spårar deskriptorn behovet av att skriva tillbaka data till hårddisken.
Inoder: Inoder hålla metadata om filer och katalogerinklusive var de finns på hårddisken (eller det virtuella filsystemet), filstorleken och tidsstämplarna för filen.
Dentries: En dentry (katalogpost) är en struktur som innehåller kataloginformation. Se dessa som en lista med inoder för filerna och katalogerna i en katalog.

Du kan se varför det är vettigt att kondensera minnet som används för buffert- och cacheminnesområdena till en enda Buff/cache-kolumn. De är som två delar av samma sak. Cacheminnesområdet skulle vara värdelöst utan att buffertminnesområdet tillhandahåller ett index till dess innehåll.

Den tillgängliga kolumnen

Den tillgängliga kolumnen är summan av den fria kolumnen plus delarna av kolumnerna Buffers och Cache (eller Buff/cache-kolumnen) som kan lämnas omedelbart. Kolumnen Tillgänglig är en uppskattning, inte en exakt siffra. Det är en välgrundad uppskattning och en korrekt sådan, men den bör inte tas lika exakt till den sista byten.

Ändra visningsenheter

För att ändra enheter som fria visar siffrorna i, använd ett av följande alternativ.

-b: Visar värdena i byte.
-k: Visar värdena i kibibyte (vilket är standard).
-m: Visar värdena i mibibyte.
-g: Visar värdena i gibibyte.
-h: Visar värdena i sensible best-fit, enheter (läsbara för människor).

Till exempel, för att använda mänskliga läsbara värden, använd alternativet -h:

free -h

free kommer att använda den mest lämpliga enheten för varje värde. Som du kan se visas några av värdena i MiB, och några av dem är i GiB.

Visar en summa

Alternativet –total gör att free visar en totalrad som summerar värdena från kolumnerna Total, Used och Free på Mem- och Swap-raderna.

free -h --total

Räknealternativet

Alternativet -c (count) talar om att fritt ska köras ett visst antal gånger, med en paus på en sekund mellan varje gång. För att köra gratis två gånger, använd detta kommando:

free -h -c 2

Körs fritt kontinuerligt

Om du vill se vilken effekt en viss applikation har på din minnesanvändning, kan det vara användbart att ha fritt igång kontinuerligt. Detta låter dig köra gratis i ett terminalfönster medan du startar, använder och sedan stänger programmet du undersöker.

Alternativet -s (sekunder) bestämmer varaktigheten av pausen mellan varje gratis körning. För att ha fri körning kontinuerligt med tre sekunders paus mellan varje uppdatering, använd det här kommandot:

free -s 3

Tryck på Ctrl+C för att stoppa processen och återgå till kommandotolken.

Kombinera alternativen Räkna och sekunder

För att köra fritt med en specificerad paus mellan varje uppdatering men stoppa efter ett visst antal rapporter, kombinera alternativen -s (sekunder) och -c (räkna). För att köra fritt fem gånger med en paus på två sekunder mellan varje uppdatering, använd det här kommandot:

free -s 2 -c 5

Efter att de fem uppdateringarna har dykt upp avslutas processen själv och du återgår till kommandotolken.

Separera lågt och högt minne

Det här är till liten nytta nuförtiden, men om du kör Linux på en 32-bitars dator kan det vara användbart. Det skiljer minnesanvändningen från lågt minne och högt minne.

På ett 32-bitars Linuxbaserat operativsystem kan CPU:n adressera maximalt 4 GB minne. Minnet är uppdelat i lågt minne och högt minne. Lågt minne mappas direkt till kärnans del av adressutrymmet. Högt minne har ingen direkt kärnmappning. Högt minne är vanligtvis allt över 896 MB.

Detta innebär att själva kärnan (inklusive dess aktiva moduler) bara kan använda lågt minne. Användarprocesser – allt som inte är själva kärnan – kan potentiellt använda lågt och högt minne.

På en 64-bitars dator visas inga värden för högt minne:

free -h -l

Minnen är gjorda av detta

En snabb sammanfattning:

Totalt: Mängden RAM installerat i ditt system.
Används: Lika med totalt-(gratis+buffertar+cache).
Ledigt: Mängden minne som är helt oanvänd av någonting.
Delat: Minne som tas av tmpfs-filsystemen.
Buffert: Datastrukturerna som underhålls för att ge ett index för allt som lagras i cachen.
Cache: Data som läses från hårddisken, modifierade data som väntar på att skrivas tillbaka till hårddisken och andra beräknade värden.
Tillgängligt: ​​Vad är verkligen gratis. En uppskattning av minnet i Free, Buffer och Cache som kan användas för att tillfredsställa en minnesförfrågan.