Po dyskusji TUTAJ na temat PHP-FPM
zużycia pamięci, właśnie znalazłem problem z odczytaniem pamięci w top
poleceniu. Oto zrzut ekranu mojego top
zaraz po ponownym uruchomieniu PHP-FPM
. Wszystko jest normalne: około 20 PHP-FPM
procesów, z których każdy zużywa 5,5 MB pamięci (0,3% całości).
Oto stary serwer tuż przed restartem PHP-FPM
(jeden dzień po poprzednim restarcie). Tutaj nadal mamy około 25 PHP-FPM
przy 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?
free
są identyczne.Odpowiedzi:
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:Wiersz Mem pokazuje całkowitą pamięć RAM w megabajtach (
$n total
u góry), ile zużywa ($n used
u góry), ile jest darmowej ($n free
u góry), ile jest współdzielone (zignoruj to), a teraz przychodzi dobra część!buffers
Icached
kolumny wfree -m
koreluje, przewidywalny,$n buffers
a$n cache
. Ale spójrz na drugi wiersz,free -m
któ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 wfree -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).
źródło
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:
Stosowanie:
Wydajność:
źródło