Łatwo zrozum wykorzystanie pamięci RAM w systemie Linux za pomocą Smem

Opublikowany: 2022-01-29
Ekran laptopa z logo powłoki Bash na czerwonym tle
fatmawati achmad zaenuri/Shutterstock

Użycie pamięci w systemie Linux może być trudne do zinterpretowania i trudne do zrozumienia. Dzięki smem łatwo jest dowiedzieć się, jakiej pamięci używa proces i które procesy używają najwięcej.

Zużycie pamięci

Linux daje Ci wiele możliwości sprawdzenia, co dzieje się z pamięcią RAM Twojego komputera. Problem w tym, że zarządzanie pamięcią jest skomplikowanym wyzwaniem dla twojego systemu operacyjnego. Musi żonglować fizyczną pamięcią RAM, wirtualną pamięcią RAM w postaci przestrzeni wymiany i wymaganiami różnych typów procesów, które są uruchomione w danym momencie.

Ile pamięci RAM potrzebuje Twój komputer do gier na PC?
POWIĄZANE Ile pamięci RAM potrzebuje Twój komputer do gier na PC?

Procesy zużywają pamięć RAM podczas ładowania się do pamięci. Następnie żądają więcej pamięci RAM, aby mieć miejsce na wykonywanie dowolnych zadań, do których są przeznaczone. Niektóre procesy prawie nie wpływają na pamięć RAM, inne są bardzo głodne pamięci.

Jądro i reszta systemu operacyjnego, środowisko pulpitu oraz każda uruchomiona aplikacja lub sesja wiersza poleceń domagają się części skończonej ilości pamięci RAM zainstalowanej w komputerze. Niektóre procesy inicjują inne procesy. Niektóre procesy współdzielą pamięć RAM z innymi procesami.

Jak sprawdzić użycie pamięci z terminala Linux?
POWIĄZANE Jak sprawdzić użycie pamięci z terminala Linux

Próbując to wszystko rozszyfrować i znaleźć prostą odpowiedź na pytanie „Ile pamięci RAM używa ten program lub proces?” może być zaskakującym wyzwaniem. Szczegółowość jest świetna i ma swoje miejsce, ale również przesada informacji może być przeszkodą.

Reklama

Na przykład użycie cat do zajrzenia do pseudosystemu plików /proc/meminfo zwróciło 50 wierszy danych wyjściowych na maszynie użytej do zbadania tego artykułu. Od czego zaczynasz?

 kot /proc/meminfo

Niektóre narzędzia linuksowe dają różne odpowiedzi. Na naszej maszynie testowej mieliśmy instancję less uruchomioną, która miała identyfikator procesu 2183.

Możemy użyć narzędzia pmap z opcją -x (rozszerzona), aby uzyskać pełny obraz wykorzystania pamięci przez proces. Użyjemy go z identyfikatorem procesu naszej instancji less :

 pmap -x 2183 

Zapytanie o mapę pamięci pojedynczego procesu

Na dole danych wyjściowych otrzymujemy sumę dla Resident Set Size, czyli ilość używanej głównej pamięci RAM.

Wyjście pmap dla pojedynczej instancji less

Następnie użyliśmy narzędzia ps z opcją -o (wyjście), wybraliśmy kolumnę RSS i przekazaliśmy jej identyfikator procesu tej samej instancji less :

 ps - lub rss 2183 

Używanie ps, aby zobaczyć RSS tego samego wystąpienia less

Otrzymujemy inny wynik. To decyzja projektowa autorów ps . To jest ze strony man ps :

Pola SIZE i RSS nie liczą niektórych części procesu, w tym tabel stron, stosu jądra, struktury thread_info i struktury task_struct. Zwykle jest to co najmniej 20 KB pamięci, która jest zawsze rezydentna. ROZMIAR to wirtualny rozmiar procesu (kod+dane+stos).
Reklama

Autorzy innych narzędzi mają własne poglądy na temat pomiaru wykorzystania pamięci RAM.

RSS, USS i PSS

Resident Set Size (RSS) to ilość pamięci RAM przydzielonej do procesu, z wyłączeniem przestrzeni wymiany, ale z uwzględnieniem pamięci RAM wymaganej przez biblioteki współdzielone, z których korzysta proces.

Dlaczego to dobrze, że pamięć RAM komputera jest pełna
POWIĄZANE Dlaczego to dobrze, że pamięć RAM twojego komputera jest pełna

RSS prawie zawsze nadmiernie zgłasza użycie pamięci RAM. Jeśli dwa lub więcej procesów korzysta z jednej lub więcej bibliotek współdzielonych, RSS po prostu doda użycie pamięci RAM każdej biblioteki do swojego licznika użycia pamięci RAM dla każdego z tych procesów. Oprócz niedokładności jest w tym pewna ironia. Biblioteki współdzielone oznaczają, że każdy proces nie musi ładować własnej prywatnej instancji biblioteki. Jeśli biblioteka jest już w pamięci, podzieli się nią — i zmniejszy obciążenie pamięci RAM.

Proporcjonalny rozmiar zestawu próbuje rozwiązać ten problem, dzieląc ilość pamięci współdzielonej między procesy, które ją współdzielą. Jeśli istnieją cztery procesy współdzielące część pamięci, PSS zgłasza, że ​​25% współdzielonej pamięci RAM jest używane przez każdy z tych procesów. To jest przybliżenie, ale bardziej przypomina to, co się dzieje, niż obraz, który maluje RSS.

Unikalny rozmiar zestawu to ilość pamięci RAM, która jest używana wyłącznie przez proces, niezależnie od tego, czy jest bezpośrednio zużywana przez proces, czy używana przez biblioteki, które są używane wyłącznie przez proces. Ponownie ignoruje przestrzeń wymiany. Interesuje go tylko oryginalna, fizyczna pamięć RAM.

USS i PSS to terminy i koncepcje zaproponowane przez Matta Mackalla, autora smem .

Narzędzie smem

Narzędzie smem informuje o pamięci używanej przez procesy, użytkowników, mapowanie lub w całym systemie. We wszystkich testowanych dystrybucjach wymagało to instalacji. Aby zainstalować go na Ubuntu, użyj tego polecenia:

 sudo apt zainstaluj smem 

Instalowanie smem na Ubuntu

Aby zainstalować smem na Fedorze, musisz wpisać:

 sudo dnf zainstaluj smem 

Instalowanie smem w Fedorze

Aby zainstalować smem na Manjaro użyj:

 sudo pacman -Sy smem 

Instalowanie smem na Manjaro

Reklama

Użycie smem bez opcji daje listę procesów korzystających z pamięci RAM.

 smem 

Wywoływanie smem bez opcji wiersza poleceń

W oknie terminala wyświetlana jest tabela informacji.

Domyślne wyjście sm

Kolumny to:

  • PID : identyfikator procesu, który używa pamięci.
  • Użytkownik : nazwa użytkownika będącego właścicielem procesu.
  • Polecenie : wiersz polecenia, który uruchomił proces.
  • Swap : ile przestrzeni wymiany wykorzystuje proces.
  • USS : Unikalny rozmiar zestawu.
  • PSS : Proporcjonalny rozmiar zestawu.
  • RSS : Rozmiar zestawu rezydenta.

Aby zobaczyć rozmiary wyrażone w procentach, użyj opcji -p (procent).

 smem -p 

Używanie opcji smem -p do żądania procentów

Rozmiary w bajtach zostały zastąpione wartościami procentowymi.

wyjście smem pokazujące wartości procentowe

Aby zobaczyć liczby wyrenderowane w bardziej przyjaznej dla człowieka formie, użyj opcji -k (skrót). Zmniejsza to liczby i dodaje wskaźniki jednostek.

 smem -k 

Używanie opcji smem -k do wyświetlania rozmiarów ze wskaźnikami jednostek

Zamiast surowych bajtów rozmiary są wyświetlane w megabajtach, gigabajtach i tak dalej.

wyjście smem za pomocą wskaźników jednostkowych, takich jak K, M i G

Reklama

Aby dodać wiersz podsumowań, użyj opcji -t (suma).

 smem -k -t 

Użycie opcji smem -t w celu dodania wiersza podsumowań do wyniku

Ostatni wiersz danych wyjściowych pokazuje sumy dla każdej kolumny.

Linia sum na dole wyniku smem

Udoskonalenie raportu

Możesz poprosić smem o raportowanie użycia pamięci przez użytkowników, mapowanie (biblioteki) lub cały system. Aby filtrować dane wyjściowe według użytkownika, użyj opcji -u (użytkownik). Zwróć uwagę, że jeśli chcesz zobaczyć więcej niż tylko własne użycie, musisz uruchomić smem z sudo .

 smem-u
 sudo smem-u 

Korzystanie z opcji smem -u z sudo i bez sudo

Jak widać, dane wyjściowe wyginają się w przypadku nazw użytkowników dłuższych niż osiem znaków.

Aby zobaczyć użycie odwzorowane na używane biblioteki, niezależnie od tego, które procesy z nich korzystają, ani którzy użytkownicy są właścicielami tych procesów, użyj opcji -m (mapowanie).

 smem -m -k -t 

Korzystanie z opcji smem -m, aby uzyskać raport mapera

Poprosiliśmy również o wartości czytelne dla człowieka i sumę.

Raport smem mapowany pokazujący wykorzystanie pamięci przez biblioteki

Aby zobaczyć wykorzystanie pamięci w całym systemie, użyj opcji -w (cały system).

 smem -w -k -t 

Raport dotyczący całego systemu smem

Sprawozdawczość dotycząca pojedynczego programu

Przy odrobinie magii wiersza poleceń możemy raportować pojedynczy program i wszystkie jego podprocesy. Prześlemy wynik z smem do tail i poprosimy tail , aby pokazał tylko ostatnią linię. Powiemy smem , aby używał wartości czytelnych dla człowieka i podał sumę. Suma będzie ostatnią tail i to będzie dla nas wyświetlany jej koniec.

Reklama

Użyjemy opcji -c (kolumny) z smem i powiemy, które kolumny chcemy uwzględnić w naszym wyniku. Ograniczymy to do kolumny Proportional Set Size. Opcja -P (filtr procesu) pozwala nam podać ciąg wyszukiwania do smem . Uwzględnione zostaną tylko pasujące wiersze wyjścia.

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

Używanie smem do pokazania wykorzystania pamięci przez proces i jego dzieci

To szybki i zgrabny sposób na sprawdzenie zużycia pamięci RAM przez program i jego procesy potomne.

Generowanie wykresów

Możesz przekazać opcje --pie lub --bar , aby smem generował wykresy. Trzeba powiedzieć, że przy zbyt wielu kategoriach wykresy szybko stają się nieczytelne, ale mogą być przydatne do szybkiego przeglądu wizualnego.

Format polecenia to:

 smem --pie nazwa -s uss 

Proszenie smem o sporządzenie wykresu kołowego

Wykres kołowy pojawi się we własnym oknie przeglądarki.

Wykres kołowy smem w osobnym oknie przeglądarki

Aby zobaczyć inne działki, użyj pss lub rss zamiast uss . Aby zobaczyć wykres słupkowy, użyj --bar zamiast --pie .

Reklama

Aby to zadziałało, musisz mieć zainstalowany Python wraz z biblioteką matplotlib . Zostały one już zainstalowane w testowanych przez nas dystrybucjach Ubuntu, Fedora i Manjaro.

Dobre rzeczy przychodzą w małych opakowaniach

Narzędzie smem ma w zanadrzu kilka dodatkowych sztuczek i zachęcamy do sprawdzenia jego strony man . Jego głównym repertuarem jest to, co tutaj opisaliśmy i jest to świetne małe narzędzie, które można mieć w swoim zestawie narzędzi CLI.

POWIĄZANE: 37 ważnych poleceń systemu Linux, które powinieneś znać