Dlaczego Linux czyści pamięć podręczną, gdy jest prawie pełna?


14

Oto jak wygląda wykres pamięci na VPS z systemem CentOS z 512 MB pamięci RAM i nginx / php-fpm / mysqld serwującą (głównie statyczną) zawartość dla kilku tysięcy odwiedzających dziennie.

Tygodniowy wykres pamięci

(to są dni na osi x)

Jak widać, w obszarze pamięci podręcznej i bufora jest dość nerwowo. Pamięć podręczna jest czyszczona w nieregularnych odstępach czasu (co wyklucza odpowiedzialne zadanie CRON). Zwykle, ale nie zawsze, oczyszcza się w punkcie, w którym nie może wzrosnąć. Czasami usuwa się prawie całkowicie, innym razem tylko w połowie.

Próbuję zrozumieć logikę tych czystek. Spodziewałbym się, że dane plików będą buforowane znacznie dłużej i nie widzę, aby inne programy używające więcej pamięci niż zwykle, gdy pamięć podręczna jest wyczyszczona.

Czy to jest normalne zachowanie, czy coś mi brakuje?

AKTUALIZACJA: Wydaje się, że aktualizacja pamięci ustabilizowała wykres. Wciąż widzę małe spadki, ale nigdzie nie było tak znaczące jak przed aktualizacją.

Po aktualizacji pamięci


Czy jest to kontener OpenVZ / Virtuozzo, czy prawdziwa maszyna wirtualna, taka jak XEN lub KVM?
— jordanm

1
Nie mogę wyjaśnić, co to jest, ale mam VPS, który wyświetla to samo zachowanie. dl.dropbox.com/u/1578899/memory-week.png
— EightBitTony

@jordanm To wirtualna maszyna oparta na Xen.
— redburn

@EightBitTony Dziękujemy za udostępnienie. Twój wygląda trochę bardziej „naturalnie”, ale wyraźnie widzę podobny (ale być może bardziej przewidywalny) wzór kropli w pamięci podręcznej.
— redburn

Zastanawiałem się, czy Munin 2 wykresy / zbieranie danych na tyle inaczej, aby spowodować pewne różnice (gładszy wykres na twoim), ale nawet mój pokazuje spadek w środku cyklu, a nie codziennie. To na pewno dziwne.
— EightBitTony,

Odpowiedzi:


3

Może być wiele rzeczy. Być może jeden z uruchomionych programów od czasu do czasu używa dużej ilości pamięci RAM. Jeśli to naprawdę tygodnie na osi x, powinieneś próbować w znacznie wyższej rozdzielczości (np. Raz na minutę lub nawet sekundę), aby uzyskać więcej informacji o tym, co się dzieje, co powoduje, że pamięć podręczna jest upuszczana. psi topwyjście (w tym średnie obciążenie) w tym czasie byłoby przydatne.


Tak, myślę, że moglibyśmy przyjąć teorię, że bardzo krótki, nagły wybuch użycia pamięci, który ma miejsce za około minutę i nie jest zauważony przez Munina, może zrzucić pamięć podręczną, która oczywiście jest zauważana, ponieważ trwa.
— EightBitTony

Nagłówek jest nieco mylący, ponieważ pokazuje tydzień danych, więc są dni na x-as, a nie tygodnie. Co do częstotliwości odpytywania: Munin pobiera dane co 5 minut i nie sądzę, że częstotliwość tę można zmienić. Używam tylko nginx, mysql, php-fpm i munin-node. Czy to może mieć coś wspólnego z pamięcią podręczną mysql?
— redburn

Kazałem górnemu (posortowanemu według użycia pamięci) zapisywać jego dane wyjściowe do pliku co 5 sekund, następnie przeanalizowałem ten plik i nie znalazłem żadnych procesów wykazujących jakiekolwiek nietypowe zachowanie w punkcie, w którym pamięć podręczna nagle spadła. O ile proces nie może wykorzystać tak dużej ilości pamięci i nadal uciec przed tym 5-sekundowym oknem, nie jestem przekonany, że może to być przyczyną. Ale jeśli nie ma procesów uruchamiających amok, co to może być?
— redburn

Ten wątek jest nieco przestarzały, ale szybka obserwacja metodologii: jak bardzo proces przyczynia się do pamięci podręcznej pamięci systemowej, nie zostanie (łatwo) odzwierciedlony na górze , ponieważ bardzo aktywny proces może szybko umieszczać dane w pamięci podręcznej bez własnego przydzielona pamięć znacznie wzrasta. Na przykład, czytanie bardzo dużego pliku w małych porcjach do transmisji - chociaż proces może nigdy nie wykorzystać więcej niż kilku przydzielonych MB , te kilka MB będzie stale zmieniać i gromadzić odniesienia w pamięci podręcznej. Tak więc rzeczą, na którą należy spojrzeć w górnym wyniku, byłoby nagłe skumulowanie czasu procesora.
— goldilocks,

Może Cię to również zainteresować: cognitivedissonance.ca/cogware/plog
— goldilocks

2

Jednym z możliwych powodów może być rosnący plik, na przykład dziennik, usuwany, kompresowany lub wysyłany w inne miejsce, gdy osiągnie określony rozmiar.

W obu przypadkach jego rozmiar w pamięci podręcznej, być może całość, jeśli nie ma presji pamięci w systemie operacyjnym, zostanie zwolniony z pamięci podręcznej, gdy tylko oryginalny plik zostanie usunięty.


Ciekawy pomysł, ale najaktywniejsze pliki dziennika rzadko przekraczają rozmiar 25 MB, zanim zostaną obrócone, a zużycie pamięci podręcznej / bufora zwykle spada o około 200 MB.
— redburn
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.