To kanoniczne pytanie o to, jak systemy operacyjne Unix zgłaszają użycie pamięci.
Podobne pytania:
Mam serwer produkcyjny, na którym działa Debian 6.0.6 Squeeze
#uname -a
Linux debsrv 2.6.32-5-xen-amd64 #1 SMP Sun Sep 23 13:49:30 UTC 2012 x86_64 GNU/Linux
Każdego dnia cron wykonuje skrypt kopii zapasowej jako root:
#crontab -e
0 5 * * * /root/sites_backup.sh > /dev/null 2>&1
#nano /root/sites_backup.sh
#!/bin/bash
str=`date +%Y-%m-%d-%H-%M-%S`
tar pzcf /home/backups/sites/mysite-$str.tar.gz /var/sites/mysite/public_html/www
mysqldump -u mysite -pmypass mysite | gzip -9 > /home/backups/sites/mysite-$str.sql.gz
cd /home/backups/sites/
sha512sum mysite-$str* > /home/backups/sites/mysite-$str.tar.gz.DIGESTS
cd ~
Wszystko działa idealnie, ale zauważam, że wykres pamięci Munina pokazuje wzrost pamięci podręcznej i buforów po utworzeniu kopii zapasowej.
Następnie pobieram pliki kopii zapasowej i usuwam je. Po usunięciu wykres pamięci Munina zwraca pamięć podręczną i bufory do stanu sprzed tworzenia kopii zapasowej.
Oto wykres Munin:
Obraz hostowany na zewnątrz był martwym linkiem.
linux
unix
memory-usage
Społeczność
źródło
źródło
Odpowiedzi:
Jest to ten sam „problem”, co w przypadku serwera, który odmawia użycia partycji wymiany i kilku innych podobnych pytań na tej stronie. ( Wysokie zużycie pamięci w systemie Linux Server , zużycie pamięci w systemie LINUX , serwer WWW ma mało pamięci itp.)
Zwróć uwagę na fakt, że zużycie pamięci pochodzi z pamięci podręcznej . Oznacza to, że przechowuje plik w pamięci. Pamięć buforowana to pamięć „wolna”. Zamiast pozostawiać blok pamięci pusty, system operacyjny utrzymuje ostatnio odczytywane pliki w tym miejscu. Jeśli aplikacja potrzebuje tej pamięci, zostanie z niej wykorzystana. Do tego czasu ma szansę uratować użytkownika przed ponownym odczytaniem pliku z dysku, jeśli często się do niego odwołuje.
Zgodnie z tym wykresem efektywne zużycie pamięci w ogóle się nie zmieniło przez cały czas trwania wykresu.
źródło
sync; echo 3 > /proc/sys/vm/drop_caches
po utworzeniu kopii zapasowej?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:
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:
(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 )
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.)
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.
źródło
top
i zgłasza wolną / przewodową / aktywną / nieaktywną pamięć RAM.Coś jeszcze, aby sprawdzić, czy powyższe nie powiedzie się:
Od: https://stackoverflow.com/a/5467207
źródło