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

redburn
źródło
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.

Jim Paris
źródło
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.

jlliagre
źródło
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