Begrijp eenvoudig uw Linux RAM-gebruik met Smem

Laptopscherm met het Bash-shell-logo op een rode achtergrond
fatmawati achmad zaenuri/Shutterstock

Het geheugengebruik van Linux kan moeilijk te interpreteren en moeilijk te begrijpen zijn. Met smem het is gemakkelijk om erachter te komen welk geheugen een proces gebruikt en welke processen het meest gebruiken.

Geheugengebruik

Linux geeft je veel manieren om te controleren wat er gebeurt met het RAM-geheugen van je computer. Het probleem is dat geheugenbeheer een ingewikkelde uitdaging is voor uw besturingssysteem. Het moet jongleren met fysiek RAM, virtueel RAM in de vorm van swapruimte en de eisen van de verschillende soorten processen die tegelijkertijd worden uitgevoerd.

Hoeveel RAM heeft uw computer nodig voor pc-games?

VERWANTHoeveel RAM heeft uw computer nodig voor pc-games?

Processen verbruiken RAM terwijl ze zichzelf in het geheugen laden. Vervolgens vragen ze om meer RAM, zodat ze ruimte hebben om de taken uit te voeren waarvoor ze zijn ontworpen. Sommige processen hebben nauwelijks invloed op RAM, andere zijn erg geheugenintensief.

De kernel en de rest van het besturingssysteem, uw desktopomgeving en elke toepassing of opdrachtregelsessie die u uitvoert, schreeuwen allemaal om een ​​deel van de eindige hoeveelheid RAM die op uw computer is geïnstalleerd. Sommige processen brengen andere processen voort. Sommige processen delen RAM met andere processen.

Geheugengebruik controleren vanaf de Linux-terminal

VERWANTGeheugengebruik controleren vanaf de Linux-terminal

Ik probeer dit allemaal te ontcijferen en een eenvoudig antwoord te geven op de vraag “Hoeveel RAM gebruikt dit programma of proces?” kan een verrassende uitdaging zijn. Granulariteit is geweldig en heeft zijn plaats, maar evengoed kan overkill aan informatie een belemmering zijn.

Gebruik bijvoorbeeld cat om in het /proc/meminfo pseudo-bestandssysteem te gluren, retourneerde 50 regels uitvoer op de machine die werd gebruikt om dit artikel te onderzoeken. Waar begin je?

cat /proc/meminfo

En sommige Linux-hulpprogramma’s geven verschillende antwoorden. Op onze testmachine hadden we een exemplaar van: less running, die een proces-ID van 2183 had.

We kunnen de pmap hulpprogramma met de -x (uitgebreide) optie om een ​​volledig beeld te krijgen van het geheugengebruik van een proces. We gebruiken het met de proces-ID van onze instantie van less:

pmap -x 2183

De geheugenkaart van een enkel proces opvragen

Onder aan de uitvoer krijgen we een totaal voor de Resident Set Size, de hoeveelheid hoofd-RAM die wordt gebruikt.

De pmap-uitvoer voor een enkele instantie van minder

We gebruikten toen de ps hulpprogramma met de -o (uitvoer) optie, selecteer de RSS kolom, en gaf het de proces-ID door van hetzelfde exemplaar van less:

ps -o rss 2183

ps gebruiken om de RSS van hetzelfde exemplaar van less te zien

We krijgen een ander resultaat. Dit is een ontwerpbeslissing van de kant van de ps auteurs. Dit is van de ps man bladzijde:

De SIZE- en RSS-velden tellen sommige delen van een proces niet mee, inclusief de paginatabellen, kernelstack, struct thread_info en struct task_struct. Dit is meestal ten minste 20 KiB geheugen dat altijd aanwezig is. SIZE is de virtuele grootte van het proces (code+data+stack).

De auteurs van andere hulpprogramma’s hebben hun eigen opvattingen over het meten van RAM-gebruik.

De RSS, de USS en de PSS

De Resident Set Size (RSS) is de hoeveelheid RAM die aan een proces is toegewezen, exclusief swapruimte, maar inclusief alle RAM die nodig is voor gedeelde bibliotheken die door het proces worden gebruikt.

Waarom het goed is dat het RAM-geheugen van uw computer vol is

VERWANTWaarom het goed is dat het RAM-geheugen van uw computer vol is

RSS rapporteert bijna altijd over het RAM-gebruik. Als twee of meer processen een of meer gedeelde bibliotheken gebruiken, voegt RSS eenvoudig het RAM-gebruik van elke bibliotheek toe aan de telling van het RAM-gebruik voor elk van die processen. Naast onnauwkeurigheid zit hier ook een zekere ironie in. Gedeelde bibliotheken betekenen dat elk proces zijn eigen privé-instantie van een bibliotheek niet hoeft te laden. Als de bibliotheek zich al in het geheugen bevindt, zal hij die delen en de RAM-overhead verminderen.

De proportionele setgrootte probeert dit aan te pakken door de hoeveelheid gedeeld geheugen te verdelen over de processen die het delen. Als er vier processen zijn die wat geheugen delen, meldt PSS dat 25% van het gedeelde RAM-geheugen door elk van die processen wordt gebruikt. Dit is een benadering, maar het lijkt meer op wat er aan de hand is dan het beeld dat RSS schetst.

De unieke setgrootte is de hoeveelheid RAM die uitsluitend door een proces wordt gebruikt, of het nu direct wordt verbruikt door het proces of wordt gebruikt door bibliotheken die uitsluitend door het proces worden gebruikt. Nogmaals, het negeert de swap-ruimte. Het is alleen geïnteresseerd in echt, fysiek RAM-geheugen.

USS en PSS zijn termen en concepten die zijn voorgesteld door Matt Mackall, de auteur van smem.

Het MKB-hulpprogramma

De smem hulpprogramma-rapporten over geheugen dat wordt gebruikt door processen, gebruikers, mapping of het hele systeem. Op alle distributies die we hebben getest, moest deze worden geïnstalleerd. Gebruik deze opdracht om het op Ubuntu te installeren:

sudo apt install smem

Smem installeren op Ubuntu

Installeren smem op Fedora moet je typen:

sudo dnf install smem

Smem installeren op Fedora

Installeren smem op Manjaro gebruik:

sudo pacman -Sy smem

Smem installeren op Manjaro

Gebruik makend van smem zonder opties geeft u een lijst met de processen die RAM gebruiken.

smem

Smem aanroepen zonder opdrachtregelopties

Een tabel met informatie wordt weergegeven in het terminalvenster.

De standaarduitvoer van sm

De kolommen zijn:

  • PID: De proces-ID van het proces dat het geheugen gebruikt.
  • Gebruiker: De gebruikersnaam van de gebruiker die eigenaar is van het proces.
  • Opdracht: De opdrachtregel waarmee het proces is gestart.
  • Ruil: Hoeveel swapruimte het proces gebruikt.
  • USS: De unieke setmaat.
  • PSS: De Proportionele Set Maat.
  • RSS: De Resident Set Grootte.

Om de maten uitgedrukt als percentages te zien, gebruik de -p (percentage) optie.

smem -p

De smem -p optie gebruiken om percentages op te vragen

De maten in bytes zijn vervangen door percentages.

smm-uitvoer met percentages

Om de figuren in een meer mensvriendelijke vorm weergegeven te zien, gebruikt u de -k (afgekorte) optie. Dit verkleint de cijfers en voegt eenheidsindicatoren toe.

smem -k

De smem -k optie gebruiken om maten weer te geven met eenheidsindicatoren

In plaats van onbewerkte bytes worden de maten weergegeven in megabytes, gigabytes, enzovoort.

smem-uitvoer met behulp van eenheidsindicatoren zoals K, M en G

Gebruik de om een ​​totaalregel toe te voegen -t (totalen) optie.

smem -k -t

De smem -t optie gebruiken om een ​​totalenregel toe te voegen aan de uitvoer

De laatste regel van de uitvoer toont de totalen voor elke kolom.

De totalenregel onderaan de smem-uitvoer

Het rapport verfijnen

Je kunt vragen smem om te rapporteren over het geheugengebruik door gebruikers, mapping (bibliotheken) of het hele systeem. Gebruik de om de uitvoer op gebruiker te filteren -u (gebruiker) optie. Houd er rekening mee dat als u meer wilt zien dan alleen uw eigen gebruik, u moet uitvoeren smem met sudo .

smem -u
sudo smem -u

De smem -u optie gebruiken met en zonder sudo

Zoals u kunt zien, raakt de uitvoer uit vorm voor gebruikersnamen die langer zijn dan acht tekens.

Om het gebruik te zien dat is toegewezen aan de bibliotheken die in gebruik zijn, ongeacht welke processen de bibliotheken gebruiken, of welke gebruikers die processen bezitten, gebruikt u de -m (kaart) optie.

smem -m -k -t

De smem -m optie gebruiken om een ​​mapper rapport te krijgen

We vroegen ook om voor mensen leesbare waarden en een totaal.

Het smem-maprapport dat het geheugengebruik door bibliotheken toont

Gebruik de om het systeembrede geheugengebruik te zien -w (systeembrede) optie.

smem -w -k -t

Het MKB-systeembrede rapport

Rapporteren over één enkel programma

Met een beetje magie op de commandoregel kunnen we rapporteren over een enkel programma en al zijn subprocessen. We zullen de uitvoer van smem naar binnen tail en vraag tail om alleen de laatste regel weer te geven. we zullen het vertellen smem om door mensen leesbare waarden te gebruiken en een totaal te geven. Het totaal is de laatste regel, en dat is de regel tail voor ons zal weergeven.

We gebruiken de -c (kolommen) optie met smem en vertel het welke kolommen we in onze uitvoer willen opnemen. We beperken dit tot de kolom Proportionele setgrootte. De -P (procesfilter) optie stelt ons in staat om een ​​zoekstring te geven aan smem . Alleen overeenkomende uitvoerregels worden opgenomen.

smem -c pss -P firefox -k -t | tail -n 1

Smem gebruiken om het geheugengebruik door een proces en zijn kinderen te tonen

Dat is een snelle en handige manier om het RAM-verbruik van een programma en de onderliggende processen te achterhalen.

Grafieken genereren

U kunt de --pie of --bar opties om te hebben smem grafieken genereren. Het moet gezegd dat bij te veel categorieën de grafieken al snel onbegrijpelijk worden, maar voor een snel visueel overzicht kunnen ze wel handig zijn.

Het opdrachtformaat is:

smem --pie name -s uss

Sem vragen om een ​​taartdiagram te maken

Het cirkeldiagram verschijnt in een eigen weergavevenster.

Een smem-cirkeldiagram in een eigen weergavevenster

Om andere plots te zien, gebruik pss of rss in plaats van uss. Gebruik . om een ​​staafdiagram te zien --bar in plaats van --pie.

Om dit te laten werken, moet Python zijn geïnstalleerd, samen met de matplotlib bibliotheek. Deze waren al geïnstalleerd op de Ubuntu-, Fedora- en Manjaro-distributies die we hebben getest.

Goede dingen komen in kleine pakketten

De smem hulpprogramma heeft nog een paar trucjes in petto, en u wordt aangemoedigd om zijn man bladzijde. Het belangrijkste repertoire is wat we hier hebben geschetst, en het is een geweldig klein hulpmiddel om in uw CLI-toolbox te hebben.

Nieuwste artikelen

spot_img

Related Stories

Leave A Reply

Vul alstublieft uw commentaar in!
Vul hier uw naam in