Jak wykorzystać pamięć (pamięć RAM) za pomocą polecenia Linux?


30

Próbuję odzyskać używaną pamięć (RAM) w procentach za pomocą poleceń systemu Linux. Mój panel wyświetla Pamięć używaną, którą muszę wyświetlić na określonej stronie internetowej.

Z forów dowiedziałem się, że poprawną pamięć można znaleźć w następujących:

free -m

Wynik:

-/+ buffers/cache:        492       1555

- / + bufory / pamięć podręczna: zawiera prawidłowe użycie pamięci. Nie wiem, jak przeanalizować te informacje lub czy jest jakieś inne polecenie, aby użyć pamięci w procentach.


3
Tutaj już na to odpowiedziano! stackoverflow.com/questions/10585978/... np .: free | grep Mem | awk '{print $4/$2 * 100.0}'
szboardstretcher

@szboardstretcher Podoba mi się ten:$ free | awk '/Mem/{printf("used: %.2f%"), $3/$2*100} /buffers\/cache/{printf(", buffers: %.2f%"), $4/($3+$4)*100} /Swap/{printf(", swap: %.2f%"), $3/$2*100}'
Simply_Me

Nie wiedząc, jaki numer jest potrzebny, trudno jest powiedzieć, jakiego numeru należy użyć. Jednak w wielu przypadkach każda z tych liczb jest po prostu bardzo naiwna i wymaga informacji o trendach i kontekście.
eckes

Odpowiedzi:


33

Oto przykładowe wyjście z bezpłatnego:

% free
             total       used       free     shared    buffers     cached
Mem:      24683904   20746840    3937064     254920    1072508   13894892
-/+ buffers/cache:    5779440   18904464
Swap:      4194236        136    4194100

Pierwszy wiersz Mem:list liczb ( )

  • total pamięć
  • used pamięć
  • free pamięć
  • użycie shared
  • użycie buffers
  • wykorzystanie pamięci podręcznej systemu plików ( cached)

W tej linii used znajdują się bufory i pamięć podręczna, a to wpływa na darmo. To nie jest twoja „prawdziwa” wolna pamięć, ponieważ system zrzuci pamięć podręczną, jeśli jest to konieczne, aby spełnić żądania alokacji.

Następna linia ( -/+ buffers/cache:) podaje nam faktycznie używaną i wolną pamięć, tak jakby nie było buforów ani pamięci podręcznej.

Ostatnia linia ( Swap) podaje użycie pamięci wymiany. Nie ma bufora ani pamięci podręcznej do wymiany, ponieważ nie byłoby sensu umieszczać tych rzeczy na dysku fizycznym.

Aby wyprowadzić używaną pamięć (bez buforów i pamięci podręcznej), możesz użyć polecenia takiego jak:

% free | awk 'FNR == 3 {print $3/($3+$4)*100}'
23.8521

Pobiera to trzecią linię i dzieli używane / łącznie * 100.

I dla wolnej pamięci:

% free | awk 'FNR == 3 {print $4/($3+$4)*100}' 
76.0657

1
Czy „- / + bufory / pamięć podręczna: 5779440 18904464” prawidłowe użycie pamięci RAM / status serwera?
codelogn

2
Ściśle mówiąc, nie, ale praktycznie mówiąc, tak. Rzeczywiste użycie pamięci to druga linia (używane: 20746840), ale część tego wykorzystania pamięci to bufory i pamięć podręczna, które mają jedynie przyspieszyć czas reakcji w systemie. Trzeci wiersz (użyty: 5779440) podaje ilość pamięci faktycznie używanej przez programy i ta liczba pamięci określa, ile więcej programów mogą przydzielić. Jeśli twoim celem jest uzyskanie wolnej / zużytej pamięci w sensie tego, które programy faktycznie używają i co faktycznie możesz przydzielić, to tak, wiersz 3 jest dla Ciebie odpowiedni.
casey

1
Należy zauważyć, że z nowszymi wersjami free, -/+ buffers/cachejest całkowicie pominięty celowo, a wartość wykazana w usedkolumnie teraz wyklucza buforów i pamięci podręcznej domyślnie. Zobacz tutaj: bugzilla.redhat.com/show_bug.cgi?id=1158828
jdgregson

10

Zamierzam wspomnieć o tym, jak analizować informacje na temat freepolecenia. Aby znaleźć procent, możesz użyć zgodnie z sugestią w pozostałych 2 odpowiedziach.

Wyjaśniono to tutaj wyraźnie . Chciałbym wyjaśnić, co mam w swoim systemie.

free -m
             total       used       free     shared    buffers     cached
Mem:          7869       4402       3466          0        208       3497
-/+ buffers/cache:        696       7173
Swap:         3999        216       3783

Zobaczmy teraz, co tak naprawdę reprezentują różne liczby.

Linia 1

  • 7869 Wskazuje pamięć / fizyczną pamięć RAM dostępną dla mojego komputera.
  • 4402 Wskazuje pamięć / RAM używane przez mój system.
  • 3466 Wskazuje całkowitą ilość wolnej pamięci RAM i dostępnej do uruchomienia nowego procesu.
  • 0 Wskazuje pamięć współdzieloną. Ta kolumna jest przestarzała i może zostać usunięta w przyszłych wersjach bezpłatnej.
  • 208 Wskazuje całkowitą pamięć RAM buforowaną przez różne aplikacje w systemie Linux.
  • 3497 Wskazuje całkowitą pamięć RAM używaną do buforowania danych do przyszłych celów.

Linia 2

-/+ buffers/cache:        696       7173

Jak obliczyć wartości 696 i 7173 uzyskane w wierszu 2?

Całkowite zużyte ( 4402 ) - Całkowita pamięć RAM ( 208 ) - Całkowita pamięć RAM do buforowania ( 3497 ) powinna stanowić rzeczywistą pamięć RAM używaną w systemie. Zwraca mi 697, która jest faktycznie wykorzystanym wyjściem RAM w drugim wierszu.

Teraz, Total Available ( 7869 ) - Actual Used ( 696 ) powinien dać ci wolną pamięć, która w tym przypadku wynosi 7173, która jest również pobierana jako wyjście w drugim wierszu.


6

Chociaż duplikat, jak wskazał @szboardstretcher, preferuję rozwiązania (w pierwotnym pytaniu) poniżej, szczególnie, że chcesz parsować stronę internetową.

$ free | awk '/Mem/{printf("used: %.2f%"), $3/$2*100} /buffers\/cache/{printf(", buffers: %.2f%"), $4/($3+$4)*100} /Swap/{printf(", swap: %.2f%"), $3/$2*100}'

Wydajność:

used: 82.68%, buffers: 42.81%, swap: 1.27%

4
Do Twojej wiadomości używam tegoused: 96.00%, buffers: 26.53%awk: (FILENAME=- FNR=4) fatal: division by zero attempted
kellyfj

Jaka jest pełna komenda? Sprawdziłem to w centach.
Simply_Me

Przepraszamy za formatowanie, ale proszę bardzo$ cat /etc/issue CentOS release 6.7 (Final) $ free | awk '/Mem/{printf("used: %.2f%"), $3/$2*100} /buffers\/cache/{printf(", buffers: %.2f%"), $4/($3+$4)*100} /Swap/{printf(", swap: %.2f%"), $3/$2*100}' used: 12.91%, buffers: 96.24%awk: (FILENAME=- FNR=4) fatal: division by zero attempted $ free total used free shared buffers cached Mem: 15429704 1991416 13438288 164 151556 1259584 -/+ buffers/cache: 580276 14849428 Swap: 0 0 0
kellyfj 30.01.2016

W przypadku niektórych wersji awk (mawk) znak procentu musi zostać podwojony, aby go wydrukować, w przeciwnym razie awk zgłasza błąd, taki jak: printf ("used:% .0f %%"), 3 $ / 2 $ * 100 Działa z zarówno jastrząb, jak i gawk.
Ján Lalinský

2
free | awk '/Mem/{printf("used: %.2f%"), $3/$2*100} /buffers\/cache/{printf(", buffers: %.2f%"), $4/($3+$4)*100} /Swap/{printf(", swap: %.2f%\n"), $3/$2*100}' 

Dodaje nowy wiersz po numerze zamiany


1

Do wersji CentOS 7 Możesz spróbować

cat /proc/meminfo 

aby zobaczyć rzeczywiste wykorzystanie pamięci przez procesy.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.