Uruchamiasz wolne - godz na serwerze i kolumnie bezpłatny Wyświetlacz pokazuje prawie zero. Mimo to aplikacje nadal reagują poprawnie i nie pojawiają się błędy pamięci. To częsty problem: Linux wykorzystuje nieużywaną pamięć RAM jako pamięć podręczną, a następnie odzyskuje jej część, gdy proces jej potrzebuje.
Aby dowiedzieć się, czy w maszynie rzeczywiście brakuje pamięci, najpierw sprawdź dostępny, a następnie zamiana i aktywność pamięci w czasie. Pojedyncza wartość używany to za mało. Oto metoda, której używam przed zatrzymaniem usługi lub dodaniem pamięci RAM.

Zacznij od `free -h` i kolumny `available`
Podstawowe polecenie nie wymaga uprawnień administratora:
Opcja -H pamZacznij od tych trzech kolumn:
całkowity: znana użyteczna pamięć jądra;dostępny:szacunek pamięci, jaką nowy proces może uzyskać bez powodowania wymiany;bezpłatny:strony, które w tej chwili nie są w ogóle używane.
dostępny jest ogólnie bardziej użyteczny niż bezpłatny ale 4 GiB w dostępny nie kończy się pamięć RAM.
Odczytuj używane, współdzielone i buforowane bez dodawania ich do siebie.
Kolumny bezpłatny Nie odpowiadają niezależnym szufladom, które należałoby dodać. W najnowszych wersjach procps-ng, używany oblicza się z całkowity I dostępnyDlatego nie jest to dokładna suma pamięci RSS wszystkich procesów.
wspólnywykorzystuje głównie pamięćtmpfs;buforyobejmuje bufory rdzeniowe;ukrytyobejmuje w szczególności pamięć podręczną plików i struktury odzyskiwalne;buff/cachegrupuje bufory i pamięć podręczną do standardowego wyświetlania.
Rozdzielić bufory I ukrytyUżyj wyświetlacza szerokoekranowego:
wolne -w -h
Ten pogląd pomaga zrozumieć alokację, ale nie zmienia diagnozy: pozostaje pytanie, ile pamięci można odzyskać bez wymiany, a także, czy ten margines zmniejszy się na stałe.
Dlaczego Linux wypełnia pamięć RAM pamięcią podręczną
Ponowne odczytanie pliku z pamięci RAM jest tańsze niż odczytanie go z dysku SSD lub twardego. Dlatego Linux przechowuje ostatnio używane dane w pamięci podręcznej stron. Dopóki żadna aplikacja nie żąda tej przestrzeni, pozostawienie jej pustej nie przynosi żadnych korzyści.
Nie czyść pamięci podręcznej za pomocą drop_cache sztucznie podnieść kręgosłup bezpłatnyUsuwasz użyteczną pamięć podręczną i zmuszasz system do ponownego odczytu danych. Ta operacja jest wykorzystywana głównie do kontrolowanych testów, a nie do rutynowej konserwacji serwera.
Możesz potwierdzić źródło wartości w /proc/meminfo :
grep -E '^(MemTotal|MemFree|MemAvailable|Buffers|Cached|SReclaimable|SwapTotal|SwapFree):' /proc/meminfo
Dostępna pamięć to szacunek generowany przez jądro. Uwzględnia on wolną pamięć i część odzyskiwalnych pamięci podręcznych, nie zakładając, że cała pamięć podręczna może zostać natychmiast odzyskana.
Wybierz jednostki i obserwuj kilka próbek
Aby porównać kilka maszyn lub wypełnić odczyt, należy stosować stałą jednostkę. Wyświetla mebibajty. W przypadku jednostek dziesiętnych należy dodać --Jeśli :
wolny -m
free -h --si
Unikaj także wyciągania wniosków na podstawie pojedynczego, odizolowanego przechwycenia. bezpłatny można powtarzać odczyt co dwie sekundy i zatrzymać po pięciu pomiarach:
wolny -h -s 2 -c 5
Zobacz, czy dostępny Ciągły spadek występuje, gdy wymiana danych postępuje i sytuacja wraca do normy po zakończeniu procesu. Krótki spadek podczas tworzenia kopii zapasowej lub kompilacji nie jest tym samym, co ciągły spadek trwający kilka godzin.
Krzyżowe odwoływanie się do pamięci RAM za pomocą swap i vmstat
Linia Zamieniać z bezpłatny Jeśli Więc z vmstat :
zamiana – pokaż
vmstat 1 5
W vmstatZignoruj pierwszy wiersz w przypadku aktywności chwilowej: reprezentuje on średnie od początku. Kolejne wiersze pokazują próbki. Powtarzające się wartości w Jeśli Lub Więczwiązany z A dostępny Niskie zużycie pamięci i spowolnienia wskazują na rzeczywiste obciążenie pamięci.
Przewodnik po swap pod Linuksem wyjaśnia, kiedy jego użycie jest normalne i dlaczego wyczyszczenie go bez pamięci RAM może spowodować zawieszenie się komputera.
Znajdź procesy, które faktycznie zużywają pamięć
Jeżeli wskaźniki potwierdzają napięcie, przed podjęciem działań zidentyfikuj procesy:
ps -eo pid,użytkownik,comm,%mem,rss --sort=-rss | head
góra
RSS Mierzy on fizyczną pamięć rezydentną procesu, ale niektóre strony mogą być współdzielone przez wiele procesów. Dlatego sumowanie wszystkich wartości RSS może zawyżać rzeczywiste zużycie. Użyj tej listy, aby zidentyfikować potencjalnego klienta, a następnie sprawdź usługę, jej konfigurację i logi.
W góraSortuj według pamięci, pobierz PID i nazwę usługi, a następnie sprawdź jej status:
systemctl status service-concerned --no-pager
Kiedy można stwierdzić, że rzeczywiście brakuje pamięci RAM
Brak pamięci staje się wiarygodny, gdy kilka sygnałów się pokrywa: dostępny pozostaje bardzo niski, vmstat pokazuje powtarzające się wymiany, czasy reakcji ulegają pogorszeniu, a jądro w końcu wysyła sygnał do zabójcy OOM.
journalctl -k -b | grep -Ei 'out of memory|oom-killer|zabity proces'
dmesg -T | grep -Ei 'out of memory|oom-killer|zabity proces'
W takim przypadku należy usunąć przyczynę: nieprawidłowo ustawiony limit pamięci, wyciek usług, nadmierne obciążenie lub niewystarczający rozmiar. Dodaj przestrzeń wymiany tylko jako zabezpieczenie, a nie jako zamiennik trwale przeciążonej pamięci RAM. dokumentuje obliczenia swoich kolumn, podczas gdy proc_meminfo(5) Opisuje liczniki udostępniane przez jądro.