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

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

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

We krijgen een ander resultaat. Dit is een ontwerpbeslissing van de kant van de ps auteurs. Dit is van de ps man bladzijde:
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.
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

Installeren smem op Fedora moet je typen:
sudo dnf install smem

Installeren smem op Manjaro gebruik:
sudo pacman -Sy smem

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

Een tabel met informatie wordt weergegeven in het terminalvenster.

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 maten in bytes zijn vervangen door 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

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

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

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

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

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

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

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

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

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

Het cirkeldiagram verschijnt 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.