Articles

Hoe het geheugengebruik te controleren vanaf de Linux Terminal

  • Dave McKay

    @TheGurkha

  • March 11, 2020, 8:00am EDT
Fatmawati Achmad Zaenuri/

Er zijn tal van manieren om het geheugengebruik binnen uw Linux-systeem te achterhalen. In dit overzicht behandelen we de meest gebruikte commandoregelmethoden: freevmstat, en top. We zullen ook kijken naar het direct lezen van /proc/meminfo.

Hoe Linux RAM gebruikt

RAM is een eindige bron waar alle processen, zoals applicaties en daemons, een stukje van willen hebben. Er is maar een beperkte hoeveelheid beschikbaar. De kernel regelt de geheugenruzies en wijst het gerantsoeneerde geheugen toe aan alle hongerige processen. Het is een beetje als een moeder vogel met meer open snavels op haar gericht dan waar ze de grub voor heeft.

Ongebruikt RAM is verspild RAM. Linux gebruikt al het RAM dat over is voor zaken als bufferruimte voor bestanden, om de computer optimaal te laten presteren. Het is gemakkelijk om de indruk te krijgen dat het RAM-geheugen van je systeem is opgebruikt door een of ander op hol geslagen proces of geheugenlek, maar dat is zelden het geval.

Advertentie

Het is meestal gewoon de kernel die hardnekkig zijn werk doet op de achtergrond. Als er andere eisen zijn voor het RAM-geheugen dat de kernel heeft gepikt voor zijn eigen apparaten, geeft hij het geheugen onmiddellijk af, dus er is geen schade aangericht.

Als de kernel besluit dat het efficiënter is om swapruimte te gaan gebruiken, brengt hij dat ook in het spel. Er is veel verwarring over de swappiness waarde in Linux en wanneer de kernel swap gaat gebruiken. Het is niet waar dat de swappiness waarde een drempelwaarde voor RAM gebruik instelt die swap activeert.

Maar laten we nu eens kijken naar de verschillende technieken die je kunt gebruiken in het terminal venster om het RAM gebruik op je Linux computer te bekijken.

Het free commando

Het free commando geeft u een tabel van het totale, gebruikte, vrije, gedeelde, buffer/cache, en beschikbare RAM op uw computer. Het toont je ook de totale hoeveelheid geconfigureerde swap space, en hoeveel er gebruikt en beschikbaar is.

Advertentie

In ons voorbeeld gebruiken we de -m (mebibytes) optie. U zou echter ook -b (bytes), -k (kibibytes), of -g (gibibytes) kunnen gebruiken.

We typen het volgende commando:

free -m

Dit is de uitvoer die we krijgen:

 total used free shared buff/cache available Mem: 1987 901 95 80 990 811 Swap: 1521 651 869

De Mem kolommen bevatten de volgende informatie:

  • Totaal: De totale hoeveelheid fysieke RAM op deze computer.
  • Gebruikt: De som van Free+Buffers+Cache afgetrokken van de totale hoeveelheid.
  • Free: De hoeveelheid ongebruikt geheugen.
  • Shared: Hoeveelheid geheugen gebruikt door de tmpfs bestandssystemen.
  • Buff/cache: Hoeveelheid geheugen gebruikt voor buffers en cache. Dit kan snel door de kernel worden vrijgegeven indien nodig.
  • Beschikbaar: Dit is een schatting van het geheugen dat beschikbaar is om geheugenverzoeken van applicaties en andere operationele software op uw computer te bedienen.

De Swap kolommen bevatten de volgende informatie:

  • Totaal: De grootte van de swappartitie of het swapbestand.
  • Gebruikt: De hoeveelheid swapruimte die in gebruik is.
  • Vrij: De hoeveelheid resterende (ongebruikte) swapruimte.

U kunt ook de volgende handige truc gebruiken die we hebben getweaked van een van onze lezers om het percentage swapruimte te zien dat wordt gebruikt:

free -m | grep Swap | awk '{print ($3/$2)*100}'

GeRELATEERD: How to Use the free Command on Linux

The vmstat Command

Het is onmogelijk om een goed begrip te hebben van de manier waarop RAM wordt gebruikt in je Linux box zonder een appreciatie van de staat van je swap space. RAM en swap space werken nauw samen.

U kunt het vmstat commando gebruiken om een diepere duik te nemen in hoe uw swap space (of virtueel geheugen) wordt gebruikt. Het geeft u een rapport over een verscheidenheid van swap-gerelateerde statistieken op basis van de gemiddelde waarden sinds de laatste reboot.

Type het volgende:

vmstat

Dit is de uitvoer zonder de wrap-around:

Advertentie

Er zijn veel datapunten in dat rapport, dus we zullen ze uitsplitsen:

  • Proc:
    • r: Het aantal “runnable” processen. Ze draaien of wachten op hun volgende in tijd gesplitste uitbarsting van CPU-cycli.
    • b: Het aantal processen in ononderbroken slaap. Deze slapen niet, maar voeren een blokkerende systeemaanroep uit. Ze kunnen niet worden onderbroken totdat ze hun huidige actie hebben voltooid. Typisch is dit proces een device driver die wacht tot een bron vrij is. Eventuele interrupts voor dat proces worden afgehandeld wanneer het proces zijn gebruikelijke activiteit hervat.
  • Geheugen:

    • swpd: De hoeveelheid virtueel geheugen die wordt gebruikt, d.w.z. hoeveel geheugen is uitgewisseld.
    • free: De hoeveelheid idle (ongebruikt) geheugen.
    • buff: De hoeveelheid geheugen die als buffers wordt gebruikt.
    • cache: De hoeveelheid geheugen die als cache wordt gebruikt.

    Swap:

    • si: De hoeveelheid virtueel geheugen die vanuit swap space wordt ingeruild.
    • so: De hoeveelheid virtueel geheugen uitgewisseld naar swap space.
  • IO:
    • bi: Blokken in. Het aantal gegevensblokken dat wordt gebruikt om virtueel geheugen terug te swappen naar RAM.
    • bo: Blokken uit. Het aantal gegevensblokken dat wordt gebruikt om virtueel geheugen uit het RAM en in de swapruimte te swappen.
  • System:
    • in: Het aantal interrupts per seconde, inclusief de klok.
    • cs: Het aantal context switches per seconde. Een context switch is wanneer de kernel overschakelt van systeem- naar gebruikersmodus verwerking.
  • CPU: Deze waarden zijn allemaal percentages van de totale CPU-tijd:
    • us: Tijd besteed aan het uitvoeren van gebruikerscode (niet-kernelcode).
    • sy: Tijd besteed aan kernelcode.
    • id: Tijd doorgebracht inactief.
    • wa: Tijd besteed aan het wachten op in- of uitvoer.
    • st: De tijd die een virtuele machine moet wachten tot de hypervisor klaar is met het bedienen van andere virtuele machines voordat hij terug kan komen en aandacht kan besteden aan deze virtuele machine.

GERELATEERD: How to Use the vmstat Command on Linux

The top Command

Het top commando toont een scherm vol met informatie. De waarden worden elke paar seconden bijgewerkt.

Om het te gebruiken, typen we het volgende:

top

De “e”-toets werd ingedrukt. Dit veranderde de weergave in megabytes, die gemakkelijker visueel te ontleden zijn dan lange reeksen die bytes voorstellen. Er zijn vijf regels met informatie bovenaan het scherm en een onderste deelvenster met kolommen met gegevens.

Hier volgt de informatie die je op elke regel vindt:

  • Regel één: De tijd, hoe lang de computer al draait, hoeveel mensen er zijn ingelogd, en wat de gemiddelde belasting is geweest in de afgelopen één, vijf en vijftien minuten.
  • Regel twee: Het aantal taken en hun status: lopend, gestopt, slapend, of zombie.
  • Regel drie: CPU-informatie (zie de uitsplitsing van de velden hieronder).
  • Regel vier: De totale hoeveelheid fysiek geheugen, en hoeveel er vrij, gebruikt, gebufferd, of gecached is.
  • Regel vijf: Totale hoeveelheid swapgeheugen, en hoeveel er vrij, gebruikt en beschikbaar is (rekening houdend met geheugen dat naar verwachting uit caches kan worden teruggehaald).

De CPU-velden op regel drie zijn als volgt:

  • us: Tijd die de CPU besteedt aan het uitvoeren van processen voor gebruikers in de gebruikersruimte.
  • sy: Tijd die de CPU besteedt aan het uitvoeren van systeem-“kernelruimte”-processen.
  • ni: Tijd die de CPU heeft besteed aan het uitvoeren van processen met een handmatig ingestelde mooie waarde.
  • id: CPU idle time.
  • wa: Tijd die de CPU besteedt aan het wachten tot I/O is voltooid.
  • hi: Tijd die de CPU besteedt aan het afhandelen van hardware-interrupts.
  • si: Tijd die de CPU besteedt aan het oplossen van software-interrupts.
  • st (steel time): Tijd die de CPU heeft verloren door het draaien van virtuele machines.

Het kan zijn dat u op de pijltjestoetsen links of rechts moet drukken om alle kolommen te zien. De waarden in elke kolom worden hieronder beschreven:

  • PID: Proces-ID.
  • USER: Naam van de eigenaar van het proces.
  • PR: Procesprioriteit.
  • NI: De aardige waarde van het proces.
  • VIRT: Virtueel geheugen dat door het proces wordt gebruikt.
  • RES: Resident geheugen gebruikt door het proces.
  • SHR: Gedeeld geheugen gebruikt door het proces.
  • S: Status van het proces. (Zie de lijst met waarden die dit veld hieronder kan aannemen).
  • %CPU: Het aandeel CPU-tijd dat door het proces is gebruikt sinds de laatste update.
  • %MEM: Het aandeel van het gebruikte fysieke geheugen.
  • TIME+: Totale door de taak gebruikte CPU-tijd in 100-den van een seconde.
  • COMMAND: De commandonaam of -regel (naam + opties). (Deze kolom staat buiten het scherm rechts in de bovenstaande afbeelding.)

Advertentie

De status die wordt weergegeven in de kolom S kan een van de volgende zijn:

  • D: Ononderbroken slaap.
  • R: Lopend.
  • S: Slapend.
  • T: Opgespoord (gestopt).
  • Z: Zombie.

Druk op Q om top af te sluiten.

Uitlezen /proc/meminfo

Veel (en waarschijnlijk de meeste) Linux-tools die geheugenstatistieken rapporteren, halen hun informatie uit het pseudo-bestandssysteem /proc/meminfo. We kunnen de cat of less commando’s gebruiken om hetzelfde te doen.

We typen het volgende:

less /proc/meminfo

Je kunt verschillende velden zien, afhankelijk van de kernel die draait, en de architectuur van de CPU. We kregen de volgende resultaten op onze virtuele machine:

MemTotal: 2035260 kB MemFree: 919064 kB MemAvailable: 1300932 kB Buffers: 33528 kB Cached: 457604 kB SwapCached: 29732 kB Active: 313360 kB Inactive: 603276 kB Active(anon): 74648 kB Inactive(anon): 355004 kB Active(file): 238712 kB Inactive(file): 248272 kB Unevictable: 16 kB Mlocked: 16 kB SwapTotal: 1557568 kB SwapFree: 873024 kB Dirty: 80 kB Writeback: 0 kB AnonPages: 414100 kB Mapped: 97436 kB Shmem: 4148 kB KReclaimable: 52932 kB Slab: 94216 kB SReclaimable: 52932 kB SUnreclaim: 41284 kB KernelStack: 9280 kB PageTables: 45264 kB NFS_Unstable: 0 kB Bounce: 0 kB WritebackTmp: 0 kB CommitLimit: 2575196 kB Committed_AS: 5072192 kB VmallocTotal: 34359738367 kB VmallocUsed: 35712 kB VmallocChunk: 0 kB Percpu: 720 kB HardwareCorrupted: 0 kB AnonHugePages: 0 kB ShmemHugePages: 0 kB ShmemPmdMapped: 0 kB CmaTotal: 0 kB CmaFree: 0 kB HugePages_Total: 0 HugePages_Free: 0 HugePages_Rsvd: 0 HugePages_Surp: 0 Hugepagesize: 2048 kB Hugetlb: 0 kB DirectMap4k: 180160 kB DirectMap2M: 1916928 kB

Alle groottes zijn in kibibytes tenzij anders aangegeven. Hier is wat ze allemaal betekenen, samen met enkele andere die u zou kunnen zien, afhankelijk van de configuratie en hardware van uw computer:

  • MemTotal: Totale bruikbare RAM (afgezien van een paar gereserveerde bits en de kernel binaire code).
  • MemFree: De som van LowFreeHighFree. De hoeveelheid RAM die momenteel beschikbaar is.
  • MemAvailable: Geschat beschikbaar geheugen om nieuwe toepassingen te starten, zonder swapping.
  • Buffers: Tijdelijke opslag voor ruwe schijfblokken. Dit vermindert de in- en uitvoer van de harde schijf. Het versnelt ook de toegang tot volgende aanvragen voor dezelfde gegevens, omdat ze al in het geheugen zitten.
  • Cached: Cached pagina’s gelezen van bestanden op de harde schijf (niet inclusief SwapCached).
  • SwapCached: Geheugen dat werd uitgewisseld en weer terug in, en een kopie blijft in de swap space.
  • Actief: Onlangs gebruikt geheugen. Het wordt niet teruggehaald, tenzij het absoluut noodzakelijk is.
  • Inactief: Geheugen dat is gebruikt, maar niet het meest recent is gebruikt. Het is een waarschijnlijke kandidaat voor reclamatie.
  • Actief(anon): Geheugen dat is toegewezen aan bestanden die zijn gemaakt in een tmpfs pseudo-bestandssysteem. Anonieme bestanden staan niet op de harde schijf.
  • Inactief(anon): Hoeveelheid anoniem, tmpfs, en shmem geheugen dat kandidaat is voor evictie (geheugenherwinning).
  • Actief(bestand): Hoeveelheid bestands cache geheugen in gebruik, of dat gebruikt is sinds de vorige geheugen terugwinnings cyclus.
  • Inactief(bestand): Hoeveelheid file cache-geheugen dat van een harde schijf is gelezen en dat in aanmerking komt voor reclaiming.
  • Unevictable: Hoeveelheid geheugen die zou moeten kunnen worden opgeëist, maar dat niet is omdat het in het geheugen is geblokkeerd door user-space processen.
  • Mlocked: Totale hoeveelheid geheugen die niet uitgezet kan worden omdat het gelocked is door user-space processen.
  • HighTotal: Totale hoeveelheid HighMem, dat gebruikt wordt door user-space programma’s en page cache. De kernel heeft toegang tot deze geheugenzone, maar de toegang is langzamer dan LowMem.
  • HighFree: Hoeveelheid vrij HighMem.
  • LowTotal: Hoeveelheid LowMem, dat beschikbaar is voor al dezelfde toepassingen als HighMem, maar ook voor de kernel om te gebruiken voor zijn eigen doeleinden.
  • LowFree: Hoeveelheid vrij LowMem.
  • MmapCopy: Hoeveelheid geheugen dat is gemapt naar bestandsgegevens.
  • SwapTotal: Totale hoeveelheid beschikbare swapruimte.
  • SwapFree: Hoeveelheid swapruimte die momenteel ongebruikt is.
  • Dirty: Hoeveelheid geheugen dat wacht om naar de schijf te worden teruggeschreven.
  • Writeback: Geheugen dat actief wordt teruggeschreven naar de schijf.
  • AnonPages: Niet door bestanden ondersteunde pagina’s die zijn toegewezen aan paginatabellen in de gebruikersruimte.
  • Toegewezen: Bestanden (zoals bibliotheken) die in het geheugen zijn gemapt.
  • Shmem: Hoeveelheid geheugen die wordt gebruikt in tmpfs pseudo-bestandssystemen.
  • KReclaimable: Kernelgeheugentoewijzingen die de kernel zal proberen terug te vorderen als de vraag naar geheugen groot genoeg is.
  • Slab: Cache van gegevensstructuren in de kernel.
  • SReclaimable: Hoeveelheid Slab geheugen dat kan worden teruggevorderd, zoals caches.
  • SUnreclaim: Hoeveelheid Slab geheugen dat niet kan worden teruggevorderd.
  • KernelStack: Hoeveelheid geheugen toegewezen aan kernel stacks.
  • PageTables: Hoeveelheid geheugen toegewezen aan het laagste niveau van paginatabellen.
  • Quicklists: Omdat het toewijzen en verwijderen van paginatabellen een zeer frequente operatie is, is het van vitaal belang dat het zo snel mogelijk gaat. Daarom worden de pagina’s die voor paginatabellen worden gebruikt, in de cache opgeslagen in een aantal verschillende lijsten die “quicklists” worden genoemd.”
  • NFS_Unstable: Network File System (NFS)-pagina’s die de server heeft ontvangen, maar nog niet naar niet-vluchtig geheugen heeft geschreven.
  • Bounce: Geheugen dat wordt gebruikt voor block device bounce buffers. Een bounce buffer wordt laag genoeg in het geheugen geplaatst voor een apparaat om er direct toegang toe te hebben. De gegevens worden vervolgens gekopieerd naar de gewenste gebruikerspagina in HighMem.
  • WritebackTmp: Geheugen dat wordt gebruikt door Filesystem in Userspace (FUSE) voor tijdelijke write-back buffers.
  • CommitLimit: De totale hoeveelheid geheugen die momenteel beschikbaar is om te worden toegewezen in het systeem.
  • Committed_AS: De hoeveelheid geheugen die wordt geschat om aan alle huidige eisen te voldoen. Als een programma wat RAM vraagt, wordt de aanvraag geregistreerd, maar het RAM wordt pas toegewezen als het programma het gaat gebruiken. Het wordt ook alleen toegewezen als het nodig is, tot de maximale hoeveelheid die het programma heeft gereserveerd. Er kan meer geheugen worden “toegewezen” dan er daadwerkelijk kan worden geleverd. Als alle programma’s hun RAM chips in een keer proberen te verzilveren, kan het geheugen casino failliet gaan (en moeten ze met de pet in de hand naar de swap-space financiers).
  • VmallocTotal: Totale grootte van het vmalloc geheugen gebied.
  • VmallocUsed: Hoeveelheid gebruikt vmalloc gebied. Sinds Linux 4.4 wordt dit veld niet meer berekend, het is hard-coded.
  • VmallocChunk: Grootste aaneengesloten blok vrij vmalloc-gebied.
  • HardwareCorrupted: Hoeveelheid geheugen gemarkeerd als met fysiek geheugen corruptie problemen. Het zal niet worden toegewezen.
  • LazyFree: Hoeveelheid geheugen in MADV_FREE toestand. Wanneer een applicatie de MADV_FREE vlag op een reeks pagina’s zet, geeft dit aan dat het deze niet langer nodig heeft, en dat ze nu kandidaten zijn voor reclamatie. Het terugnemen kan worden uitgesteld tot er voldoende vraag naar geheugen is. Als de applicatie begint te schrijven naar pagina’s, kan de terugname worden geannuleerd.
  • AnonHugePages: Niet-bestand-ondersteunde reusachtige pagina’s in kaart gebracht in gebruiker-ruimte paginatabellen. Niet-bestand-ondersteunde pagina’s zijn niet afkomstig van een bestand op de harde schijf.
  • ShmemHugePages: Hoeveelheid geheugen gebruikt door gedeeld geheugen (shmem) en pseudo-bestandssystemen (tmpfs) toegewezen met enorme pagina’s.
  • ShmemPmdMapped: Hoeveelheid gedeeld geheugen toegewezen aan gebruikersruimte met enorme pagina’s.
  • CmaTotal: Hoeveelheid CMA (Contiguous Memory Allocator) pagina’s. Deze worden gebruikt door apparaten die alleen kunnen communiceren naar contiguous regions of memory.
  • CmaFree: Hoeveelheid vrije CMA (Contiguous Memory Allocator) pagina’s.
  • HugePages_Total: Grootte van de Huge page pool.
  • HugePages_Free: Aantal niet-toegewezen huge pages in de pool.
  • HugePages_Rsvd: Aantal gereserveerde reusachtige pagina’s. De verplichting om toe te wijzen is aangegaan, maar toewijzing heeft nog niet plaatsgevonden.
  • HugePages_Surp: Aantal reusachtige pagina’s in de pool boven de gedefinieerde systeemwaarde.
  • Hugepagesize: Grootte van reusachtige pagina’s.
  • DirectMap4k: Aantal bytes RAM gemapt naar 4 kB pagina’s.
  • DirectMap4M: Aantal bytes RAM gemapt naar 4 MB pagina’s.
  • DirectMap2M: Aantal bytes RAM gemapt naar 2 MB pagina’s.
  • DirectMap1G: Aantal bytes RAM toegewezen aan 2 GB pagina’s.

Zoals gebruikelijk bij Linux is er meer dan één manier om een snel overzicht te krijgen, en altijd minstens één manier om dieper op de details in te gaan.

Advertentie

Je zult waarschijnlijk freetop, en vmstate regelmatig gebruiken, en houd /proc/meminfo achter de hand voor wanneer u een diepgaand onderzoek naar een bepaald probleem moet doen.

Dave McKay
Dave McKay gebruikte voor het eerst computers toen ponsband nog in de mode was, en sindsdien programmeert hij. Na meer dan 30 jaar in de IT-industrie, is hij nu een full-time technologie journalist. Tijdens zijn loopbaan heeft hij gewerkt als freelance programmeur, manager van een internationaal software ontwikkelingsteam, een IT services project manager, en, meest recent, als een Data Protection Officer. Dave is een Linux-evangelist en voorstander van open source.Read Full Bio”

Laat een antwoord achter

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *