Bil

FörstÄ enkelt din Linux-RAM-anvÀndning med Smem

LaptopskÀrm som visar Bash-skallogotypen över en röd bakgrundfatmawati achmad zaenuri/Shutterstock

MinnesanvÀndning i Linux kan vara svÄr att tolka och svÄr att förstÄ. Med smem Àr det enkelt att ta reda pÄ vilket minne en process anvÀnder och vilka processer som anvÀnder mest.

MinnesanvÀndning

Linux ger dig mÄnga sÀtt att kontrollera vad som hÀnder med din dators RAM. Problemet Àr att minneshantering Àr en komplicerad utmaning för ditt operativsystem. Den mÄste jonglera med fysiskt RAM-minne, virtuellt RAM-minne i form av swap-utrymme och kraven frÄn de olika typer av processer som körs vid en viss tidpunkt.

Processer förbrukar RAM nÀr de laddar in sig sjÀlva i minnet. De begÀr sedan mer RAM sÄ att de har utrymme att utföra vilka uppgifter de Àn Àr designade för att göra. Vissa processer pÄverkar knappt RAM, andra Àr mycket minneshungriga.

KÀrnan och resten av operativsystemet, din skrivbordsmiljö och varje applikation eller kommandoradssession du kör krÀver alla en del av den Àndliga mÀngden RAM som Àr installerat i din dator. Vissa processer skapar andra processer. Vissa processer delar RAM med andra processer.

Försöker dechiffrera allt detta och komma med ett enkelt svar pĂ„ frĂ„gan “Hur mycket RAM anvĂ€nder det hĂ€r programmet eller processen?” kan vara en överraskande utmaning. Granulariteten Ă€r stor och har sin plats, men pĂ„ samma sĂ€tt kan överdriven information vara ett hinder.

Till exempel, att anvÀnda cat för att kika in i /proc/meminfo pseudofilsystemet returnerade 50 rader utdata pÄ maskinen som anvÀndes för att undersöka den hÀr artikeln. Var börjar du?

cat /proc/meminfo

Och vissa Linux-verktyg ger olika svar. PÄ vÄr testmaskin hade vi en instans av mindre körning, som hade ett process-ID pÄ 2183.

Vi kan anvÀnda verktyget pmap med alternativet -x (extended) för att fÄ en fullstÀndig bild av minnesanvÀndningen för en process. Vi kommer att anvÀnda det med process-ID för vÄr instans av mindre:

pmap -x 2183

FrÄgar minneskartan för en enskild process

LÀngst ner pÄ utgÄngen fÄr vi en totalsumma för Resident Set Size, vilket Àr mÀngden huvud-RAM som anvÀnds.

Pmap-utgÄngen för en enda instans av mindre

Vi anvÀnde sedan ps-verktyget med alternativet -o (output), valde RSS-kolumnen och skickade den process-ID för samma instans av mindre:

ps -o rss 2183

AnvÀnder ps för att se RSS för samma instans av mindre

Vi fÄr ett annat resultat. Detta Àr ett designbeslut frÄn ps-författarnas sida. Det hÀr Àr frÄn ps man-sidan:

SIZE- och RSS-fÀlten rÀknar inte vissa delar av en process inklusive sidtabellerna, kÀrnstacken, struct thread_info och struct task_struct. Detta Àr vanligtvis minst 20 KiB minne som alltid finns kvar. SIZE Àr den virtuella storleken pÄ processen (kod+data+stack).

Författarna till andra verktyg har sina egna Äsikter om hur man mÀter RAM-anvÀndning.

RSS, USS och PSS

Resident Set Size (RSS) Àr mÀngden RAM som allokeras till en process, exklusive swap-utrymme, men inklusive eventuellt RAM som krÀvs av delade bibliotek som processen anvÀnder.

RSS överrapporterar nĂ€stan alltid RAM-anvĂ€ndning. Om tvĂ„ eller flera processer anvĂ€nder ett eller flera delade bibliotek, kommer RSS helt enkelt att lĂ€gga till RAM-anvĂ€ndningen för varje bibliotek till dess rĂ€kning av RAM-anvĂ€ndning för var och en av dessa processer. Förutom inexakthet finns det en viss ironi i detta. Delade bibliotek innebĂ€r att varje process inte behöver ladda sin egen privata instans av ett bibliotek. Om biblioteket redan finns i minnet kommer det att dela det – och minska RAM-overheaden.

Den proportionella uppsÀttningsstorleken försöker ÄtgÀrda detta genom att dela mÀngden delat minne mellan processerna som delar det. Om det finns fyra processer som delar lite minne, rapporterar PSS att 25 % av det delade RAM-minnet anvÀnds av var och en av dessa processer. Detta Àr en uppskattning men den liknar mer vad som hÀnder Àn bilden som RSS mÄlar upp.

Den unika uppsĂ€ttningsstorleken Ă€r mĂ€ngden RAM som anvĂ€nds uteslutande av en process, oavsett om den konsumeras direkt av processen eller anvĂ€nds av bibliotek som enbart anvĂ€nds av processen. Återigen ignorerar det bytesutrymme. Den Ă€r bara intresserad av Ă€kta, fysiskt RAM-minne.

USS och PSS Àr termer och begrepp som föreslogs av Matt Mackall, författaren till smem.

Smem Utility

Smem-verktyget rapporterar om minne som anvÀnds av processer, anvÀndare, mappning eller i hela systemet. PÄ alla distributioner vi testade krÀvde det installation. För att installera det pÄ Ubuntu, anvÀnd det hÀr kommandot:

sudo apt install smem

Installerar smem pÄ Ubuntu

För att installera smem pÄ Fedora mÄste du skriva:

sudo dnf install smem

Installerar smem pÄ Fedora

För att installera smem pÄ Manjaro anvÀnd:

sudo pacman -Sy smem

Installerar smem pÄ Manjaro

Att anvÀnda smem utan alternativ ger dig en lista över de processer som anvÀnder RAM.

smem

Anropar smem utan kommandoradsalternativ

En tabell med information visas i terminalfönstret.

StandardutgÄngen för smem

Kolumnerna Àr:

  • PID: Process-ID för processen som anvĂ€nder minnet.
  • AnvĂ€ndare: AnvĂ€ndarnamnet för anvĂ€ndaren som Ă€ger processen.
  • Kommando: Kommandoraden som startade processen.
  • Byta: Hur mycket bytesutrymme processen anvĂ€nder.
  • USS: Den unika setstorleken.
  • PSS: Den proportionella uppsĂ€ttningsstorleken.
  • RSS: Resident Set Size.

För att se storlekarna uttryckta i procent, anvÀnd alternativet -p (procent).

smem -p

AnvÀnda smem -p alternativet för att begÀra procentsatser

Storlekarna i byte har ersatts med procentsatser.

smem-utgÄng som visar procentsatser

För att se figurerna Ätergivna i en mer mÀnniskovÀnlig form, anvÀnd alternativet -k (förkorta). Detta krymper siffrorna och lÀgger till enhetsindikatorer.

smem -k

AnvÀnda smem -k-alternativet för att visa storlekar med enhetsindikatorer

IstÀllet för rÄbyte visas storlekarna i megabyte, gigabyte och sÄ vidare.

smem-utgÄng med enhetsindikatorer som K, M och G

För att lÀgga till en totalrad, anvÀnd alternativet -t (total).

smem -k -t

AnvÀnd alternativet smem -t för att lÀgga till en totalrad till utdata

Den sista raden i utdata visar totaler för varje kolumn.

Totalraden lÀngst ner i smem-utgÄngen

Förfina rapporten

Du kan be smem att rapportera om minnesanvÀndningen av anvÀndare, kartlÀggning (bibliotek) eller systemomfattande. AnvÀnd alternativet -u (anvÀndare) för att filtrera utdata efter anvÀndare. Observera att om du vill se mer Àn bara din egen anvÀndning, mÄste du köra smem med sudo .

smem -u
sudo smem -u

AnvÀnda smem -u-alternativet med och utan sudo

Som du kan se blir utgÄngen ur form för anvÀndarnamn som Àr lÀngre Àn Ätta tecken.

För att se anvÀndningen mappad till de bibliotek som anvÀnds, oavsett vilka processer som anvÀnder biblioteken, eller vilka anvÀndare som Àger dessa processer, anvÀnd alternativet -m (mappning).

smem -m -k -t

AnvÀnda smem -m alternativet för att fÄ en kartlÀggningsrapport

Vi bad ocksÄ om mÀnskliga lÀsbara vÀrden och en total.

Den smem-mappade rapporten som visar bibliotekens minnesanvÀndning

AnvÀnd alternativet -w (systemomfattande) för att se den systemomfattande minnesanvÀndningen.

smem -w -k -t

Den smem-systemomfattande rapporten

Rapportering om ett enda program

Med lite kommandoradsmagi kan vi rapportera om ett enda program och alla dess underprocesser. Vi skickar utgÄngen frÄn smem till tail och ber tail att bara visa den sista raden. Vi sÀger Ät smem att anvÀnda vÀrden som kan lÀsas av mÀnniskor och att ge en totalsumma. Summan kommer att vara den sista raden, och det Àr den linjesvans som visas för oss.

Vi anvÀnder alternativet -c (kolumner) med smem och berÀttar vilka kolumner vi vill ska inkluderas i vÄr produktion. Vi begrÀnsar detta till kolumnen Proportionell uppsÀttningsstorlek. Alternativet -P (processfilter) lÄter oss ge en sökstrÀng till smem . Endast matchande utdatarader kommer att inkluderas.

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

AnvÀnda smem för att visa minnesanvÀndningen av en process och dess barn

Det Àr ett snabbt och snyggt sÀtt att ta reda pÄ RAM-förbrukningen för ett program och dess underordnade processer.

Generera grafer

Du kan skicka alternativen –pie eller –bar för att fĂ„ smem att generera grafer. Det mĂ„ste sĂ€gas att med för mĂ„nga kategorier blir graferna snabbt obegripliga, men de kan vara anvĂ€ndbara för en snabb visuell överblick.

Kommandoformatet Àr:

smem --pie name -s uss

Be smem att ta fram ett cirkeldiagram

Cirkeldiagrammet visas i sitt eget visningsfönster.

Ett smem-cirkeldiagram i sitt eget visningsfönster

För att se andra plotter, anvĂ€nd pss eller rss istĂ€llet för uss. För att se ett stapeldiagram, anvĂ€nd –bar istĂ€llet för –pie.

För att detta ska fungera mÄste du ha Python installerat, tillsammans med matplotlib-biblioteket. Dessa var redan installerade pÄ Ubuntu-, Fedora- och Manjaro-distributionerna vi testade.

Bra saker kommer i smÄ förpackningar

Smem-verktyget har nÄgra fler knep i rockÀrmen, och du uppmuntras att kolla in dess man-sida. Dess huvudsakliga repertoar Àr vad vi har beskrivit hÀr, och det Àr ett fantastiskt litet verktyg att ha i din CLI-verktygslÄda.

RELATERAD: 37 Viktiga Linux-kommandon du bör kÀnna till

Relaterade inlÀgg

BotĂłn volver arriba

Annonsblockerare upptÀckt

Du mÄste ta bort AD BLOCKER för att fortsÀtta anvÀnda vÄr webbplats TACK