Występuje problem z linią Ate My Ram w systemie Linux .
Nie panikuj.
To nie jest problem.
Twój system działa zgodnie z przeznaczeniem.
Problemem nie jest twój system operacyjny - problemem jest twoje zrozumienie, czym jest „wolna” pamięć.
Systemy uniksowe używają pamięci nie tylko do uruchamiania programów. Pamięć może być używana do:
- Uruchamianie programów (aktywne / używane)
- Buforowanie przesyłanych danych (bufory)
- Buforowanie danych ostatnio odczytanych / zapisanych na dysk (pamięć podręczna)
- Absolutnie nic (za darmo)
Poniżej znajduje się krótka (iw dużej mierze niekompletna) prezentacja tego, jak nowoczesne systemy uniksowe zgłaszają użycie pamięci RAM.
Co to jest wolna pamięć (definicja systemu operacyjnego) ?
Gdy system uniksowy zgłasza pamięć RAM jako wolną , oznacza to: „Nie używam tej pamięci RAM do niczego”.
Wolna pamięć RAM jest faktycznie bezwartościowa - nie przyspiesza twojego systemu, po prostu siedzi „wolna” na wypadek, gdyby coś jej potrzebowało. Tym czymś może być dowolny z trzech innych elementów, o których wspomniałem powyżej.
Co to jest pamięć podręczna i buforowa?
Pamięć podręczna i pamięć buforowa to pamięć RAM używana przez system operacyjny w celu przyspieszenia działania systemu.
Ta pamięć nie jest teraz potrzebna do uruchamiania programów , więc Twój system operacyjny używa jej do przechowywania często potrzebnych danych - na przykład biblioteka C (potrzebna prawie przez każdy uruchamiany program) jest prawie zawsze przechowywana w cache
pamięci, więc system nie musi iść na dysk, aby znaleźć instrukcje potrzebne do wydrukowania „Hello World” na ekranie.
Jest to o wiele bardziej skomplikowane - pamięć współdzielona, pamięć przewodowa itp. - ale dla naszych celów to proste wyjaśnienie jest wystarczające.
Co to jest pamięć aktywna?
Pamięć aktywna jest częścią tego, co rozumiemy jako pamięć „używaną” - pamięć RAM, której aplikacje używają do wszystkiego, co robią - sortowanie arkuszy kalkulacyjnych, serwowanie stron internetowych, edytowanie grafiki itp.
Pamięć „Aktywna” była ostatnio „aktywna” - - program, który twierdzi, że wykorzystał jego zawartość (czytanie lub pisanie) i nie jest uważany za dobrego kandydata do zamiany.
Co to jest pamięć nieaktywna?
Podobnie jak pamięć aktywna, pamięć nieaktywna to pamięć RAM, której aplikacje używają do wszystkiego, co robią. Różnica polega na tym, że pamięć ta nie była dostępna od dłuższego czasu, więc jeśli push przychodzi, aby odepchnąć system operacyjny uważa, że można go zamienić na dysk i (przy odrobinie szczęścia) program twierdzi, że nie poprosi o to ponownie, więc nigdy tego nie zauważy.
Co to jest pamięć „używana” (definicja CZŁOWIEKA)
To, co ty i ja uważamy za pamięć „używaną”, jest zasadniczo sumą pamięci aktywnej i nieaktywnej. Cała pamięć RAM aktualnie żądana przez aplikacje do ich użycia.
Tak długo, jak masz zainstalowaną więcej pamięci RAM niż suma pamięci aktywnej i nieaktywnej (plus ładny margines bezpieczeństwa, powiedzmy 512-1024 MB na górze), jesteś w dobrym miejscu: Twój system operacyjny prawdopodobnie nie osiągnie wydajności wymiany i zabijania .
Co to jest „wolna” pamięć (definicja CZŁOWIEKA) ?
To, co ty i ja uważamy za „wolną” pamięć, to pamięć dostępna do uruchamiania programów.
Jest to nieco bardziej skomplikowane niż tylko „bezpłatna” liczba raportów systemu operacyjnego. Gdy program prosi o pamięć RAM, system operacyjny spróbuje uzyskać tę pamięć RAM w jak najmniej zakłócający sposób:
- Jeśli dostępna jest Wolna pamięć (siedząca bezczynnie), pamięć RAM zostanie przydzielona.
- Jeśli nie ma dostępnej wolnej pamięci, system operacyjny kanibalizuje pamięć podręczną i przestrzeń buforową: Rzadziej / ostatnio najrzadziej dostępne elementy w puli buforów zostaną wyrzucone, a pamięć RAM przekazana programowi.
- Jeśli nie ma bufora / pamięci podręcznej RAM do kanibalizacji, swapper spojrzy na nieaktywną pamięć i wybierze regiony, które według niego są najmniej prawdopodobne. Dane zostaną przeniesione na stronę wymiany (dysk), a nowo zwolniona pamięć RAM zostanie przekazana programowi.
- Jeśli cała nieaktywna pamięć RAM została zamieniona, swapper rozpocznie umieszczanie aktywnej pamięci RAM na dysku.
(Chodzi tutaj o to, gdzie wydajność zwykle idzie do psów: za każdym razem, gdy program włącza procesor, jego zamienione bity muszą zostać przywrócone do pamięci RAM, co oznacza , że pamięć aktywna innego programu musi zostać zamieniona - wysoki obrót w swapie nazywa się thrashingiem )
- Jeżeli system wyswapowany wszystko to może (i wypełnione partycji wymiany) lub jeśli używasz systemu bez partycji wymiany, Bad Things zdarzyć. W tym momencie nastąpi jedna z dwóch rzeczy:
malloc()
zawiedzie. Jest to zachowanie zgodne z POSIX - system operacyjny poinformuje program z prośbą o pamięć RAM, że nie może spełnić żądania.
Program może poprosić o mniej pamięci RAM lub, jeśli nie poradzi sobie z mniejszą ilością pamięci, może wyczyścić i wyjść. (Jeśli program jest źle napisany, po prostu się zawiesi.)
- Jeśli korzystasz z Linuksa, OOM-Killer może iść na przejażdżkę w stylu gangów, zabijając szaleństwo, przerywając inne procesy, aby spróbować zwolnić wystarczającą ilość pamięci RAM, aby spełnić żądanie.
W przypadku, gdy nie możesz powiedzieć na podstawie mojego opisu tutaj i mojej odpowiedzi na powiązane pytanie, uważam, że jest to okropny sposób na rozwiązanie problemu.
Dlaczego wolna pamięć RAM rośnie po usunięciu plików?
W przykładzie z pytania tutaj zauważyłeś, że można „zwolnić” pamięć RAM, usuwając plik kopii zapasowej - wyjaśnienie tego jest dość proste: ponieważ nic nie używa tego pliku (brak otwartych uchwytów plików) i nie jest już dostępny z system plików (niepowiązany) system operacyjny wie, że nikt nigdy nie uzyska dostępu do tych danych, i usuwa dane z pamięci podręcznej systemu plików.
To sprawia, że system operacyjny zgłasza więcej wolnej pamięci, ale nie ma wpływu na wydajność systemu.