Jak interpretować dane wyjściowe polecenia „top” w systemie Linux?


27

Po dyskusji TUTAJ na temat PHP-FPMzużycia pamięci, właśnie znalazłem problem z odczytaniem pamięci w toppoleceniu. Oto zrzut ekranu mojego topzaraz po ponownym uruchomieniu PHP-FPM. Wszystko jest normalne: około 20 PHP-FPMprocesów, z których każdy zużywa 5,5 MB pamięci (0,3% całości).

wprowadź opis zdjęcia tutaj

Oto stary serwer tuż przed restartem PHP-FPM(jeden dzień po poprzednim restarcie). Tutaj nadal mamy około 25 PHP-FPMprzy podwójnym zużyciu pamięci (10 MB oznacza 0,5% całości). Zatem całkowita wykorzystana pamięć powinna wynosić 600–700 MB. Dlaczego więc użyto pamięci 1,6 GB?

wprowadź opis zdjęcia tutaj



@ephemient nie, tutaj nie ma to miejsca. Sprawdziłem wszystkie te rzeczy. Jest to związane z PHP-FPM, a pamięć zostanie zwolniona przez ponowne uruchomienie tylko PHP-FPM. W każdym razie wartości Mem i bufora / pamięci podręcznej freesą identyczne.
Googlebot,

6
Wygląda na to, że używasz „VM” Virtuozzo. Wszystkie zakłady są wyłączone, jeśli chodzi o rozliczanie pamięci na te rzeczy.
womble


Drogi womble i efemencie: ukradłem obie twoje odpowiedzi! rechot
Wesley,

Odpowiedzi:


34

TL; DR 1

Twój serwer znajduje się w jakimś kontenerze wirtualnym / openvz / virtualization-du-jour . Zrozumienie wykorzystania pamięci polega na przechylaniu wiatraków.

TL; DR 2

Linux zjadł twoją pamięć RAM! Ale to dobrze, robi to wszystkim.


Długa historia

Rozbijmy to!

W Mem:dziale mamy:

  • $n total: ilość fizycznej pamięci RAM w twoim komputerze
  • $n used: ile pamięci zużywa Linux, a nie tylko suma procesów.
  • $n free: Ile pamięci RAM nie zużywa Linux. Nie bierze to pod uwagę, że buforowana i buforowana pamięć jest w zasadzie „wolna”.
  • $n buffers: przestrzeń buforowa to miejsce, w którym przechowywane są bloki dysku we / wy odczytane lub oczekujące na zapis. Bufor jest reprezentacją pamięci RAM pojedynczego bloku dysku.

W Swap:dziale mamy:

  • $n total: Objaśniające. Ilość miejsca na dysku dostępna do zamiany stron.
  • $n used: Objaśniające. Ile miejsca na dysku używa się.
  • $n free: Herp Derp.
  • $n cache: Ściśle związane z powyższymi buforami. W rzeczywistości jest częścią pamięci podręcznej strony i sama nie ma miejsca na dysku fizycznym. Nie martw się o szczegóły tej rozmowy.

Ciekawa część pojawia się, gdy biegniesz free -m. Zobaczysz trzy linie, a wszystkie liczby będą skorelowane z górą. Podam mój własny komputer jako przykład:

             total       used       free     shared    buffers     cached
Mem:          8070       7747        323          0        253       5713
-/+ buffers/cache:       1780       6290
Swap:         5055          0       5055

Wiersz Mem pokazuje całkowitą pamięć RAM w megabajtach ( $n totalu góry), ile zużywa ( $n usedu góry), ile jest darmowej ( $n freeu góry), ile jest współdzielone (zignoruj ​​to), a teraz przychodzi dobra część! buffersI cachedkolumny w free -mkoreluje, przewidywalny, $n buffersa $n cache. Ale spójrz na drugi wiersz, free -mktóry zaczyna się od tego -/+ buffers/cache:. Matematyka pokazuje, że wykorzystana ilość jest naprawdę (ogółem) - ((używane bufory) buforowane). Bezpłatne jest (ogółem) - (theNewUsed).

Co to wszystko znaczy? Oznacza to, że Linux zjadł twoją pamięć RAM! Krótko mówiąc, jądro Linux pożera pamięć RAM, ponieważ jest dostępna do buforowania dysku. Nic nie możesz na to poradzić, chyba że masz ochotę skompilować niestandardowe jądro. Wskazówka: nie.

Pamięć RAM jest naprawdę dostępna i bezpłatna dla procesów do wykorzystania według ich uznania. To właśnie oznacza -/+ buffers/cache:rząd w free -m. Znajdujesz się jednak w kontenerze do wirtualizacji bez hiper-wizjera, co sprawia, że ​​wszystko jest trochę zawirowane. W tym momencie po prostu nie można podsumować pamięci z dokładnością bajtów. Jednak nie widzisz żadnych zachowań, które są strasznie niezwykłe.

Zachowaj spokój i nie przerywaj. Zdobądź także serwer fizyczny (chyba że podoba Ci się pamięć, która wygląda jak Kreskin jest Twoim SysAdminem).


Czy używana ilość nie jest buforowana ((używane bufory))?
Mac

1

Top nie jest najlepszym sposobem na sprawdzenie zużycia pamięci. Ponieważ jednak moje pytanie zostało oznaczone jako duplikat tego pytania, zamieszczę tutaj swoją rezolucję.

Czytałem na forum, że ps_mem.py sprawdzi dla ciebie użycie pamięci.

Repozytorium: https://github.com/pixelb/ps_mem/

Ściągnij:

pip install ps_mem

Stosowanie:

ps_mem

Wydajność:

# ps_mem
 Private  +   Shared  =  RAM used   Program

  4.0 KiB +  15.5 KiB =  19.5 KiB   udevd
  4.0 KiB +  16.0 KiB =  20.0 KiB   mysqld_safe
  4.0 KiB +  25.5 KiB =  29.5 KiB   dbus-daemon
  4.0 KiB +  27.5 KiB =  31.5 KiB   xinetd
 60.0 KiB +  14.5 KiB =  74.5 KiB   epmd
108.0 KiB +  23.0 KiB = 131.0 KiB   init
  8.0 KiB + 135.0 KiB = 143.0 KiB   saslauthd (2)
180.0 KiB +  34.0 KiB = 214.0 KiB   check_scripts.s
796.0 KiB +  41.0 KiB = 837.0 KiB   bash
528.0 KiB + 359.0 KiB = 887.0 KiB   crond (7)
  1.2 MiB + 218.0 KiB =   1.4 MiB   sshd (2)
  1.6 MiB +  45.0 KiB =   1.6 MiB   rsyslogd
  2.0 MiB + 133.0 KiB =   2.1 MiB   beam.smp
  1.3 MiB +   2.3 MiB =   3.6 MiB   httpd (8)
 12.8 MiB + 956.0 KiB =  13.8 MiB   sendmail.sendmail (7)
 53.5 MiB + 114.0 KiB =  53.7 MiB   mysqld
317.6 MiB +   2.3 MiB = 320.0 MiB   python (6)
---------------------------------
                        398.5 MiB
=================================
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.