Okna.  Wirusy.  Laptopy.  Internet.  Biuro.  Narzędzia.  Kierowcy

Niedawno w jednym z serwery wirtualne Napotkałem problem, którego zapis na dysku zajmował dużo czasu. A pod tym tematem znalazłem ciekawy, który szczegółowo omawia funkcjonowanie operacji zapisu na dysku buforującym w systemie Linux. Dziś pojawi się tłumaczenie tego artykułu.

Buforowanie w systemie Linux

Kiedy dane są zapisywane na dysku (przez dowolny program), Linux buforuje te informacje w obszarze pamięci zwanym Page Cache. Informacje o tym obszarze pamięci można wyświetlić za pomocą poleceń darmowy, vmstat Lub szczyt. Pełną informację o tym obszarze pamięci znajdziesz w pliku /proc/meminfo. Poniżej przykład tego pliku na serwerze z 4 GB RAM:

MemTotal: 3950112 kB MemFree: 622560 kB Bufory: 78048 kB Buforowane: 2901484 kB SwapCached: 0 kB Aktywne: 3108012 kB Nieaktywne: 55296 kB HighTotal: 0 kB HighFree: 0 kB LowTotal: 3950112 kB LowFree: 622 56 0 kB SwapTotal: 4198272 kB SwapFree : 4198244 kB Dirty: 416 kB Zapis zwrotny: 0 kB Mapowane: 999852 kB Slab: 57104 kB Committed_AS: 3340368 kB PageTables: 6672 kB VmallocTotal: 536870911 kB VmallocUsed: 35300 kB VmallocChunk: 5368 35 611 kB HugePages_Total: 0 HugePages_Free: 0 Hugepagesize: 2048 kB

Rozmiar pamięci podręcznej strony jest pokazany w parametrze „Cached” w w tym przykładzie to jest 2,9 GB. W miarę zapisywania stron w pamięci zwiększa się rozmiar parametru „Dirty”. Gdy zaczniesz zapisywać bezpośrednio na dysk, parametr „Writeback” będzie się zwiększał aż do zakończenia nagrywania. Dość trudno jest dostrzec wysoki parametr „Zapis zwrotny”, ponieważ jego wartość wzrasta tylko podczas odpytywania, gdy operacje wejścia/wyjścia (I/O) są kolejkowane, ale nie zostały jeszcze zapisane na dysku.
Linux zazwyczaj zapisuje dane z pamięci podręcznej na dysk za pomocą procesu pdflush. W każdej chwili w systemie pracuje od 2 do 8 wątków pdflush. Gęsiego /proc/sys/vm/nr_pdflush_threads widać, jak bardzo w tej chwili aktywne wątki. Za każdym razem, gdy wszystkie istniejące wątki pdflush są zajęte przez co najmniej 1 sekundę. Nowe wątki próbują zapisać dane do wolnych kolejek urządzeń, tak aby na każde aktywne urządzenie przypadał 1 wątek opróżniający dane z pamięci podręcznej. Za każdym razem, gdy mija sekunda braku aktywności pdflush, 1 wątek jest usuwany. W systemie Linux możesz skonfigurować minimalną i maksymalną liczbę wątków pdflush.

Konfigurowanie pdflusha

Każdy strumień pdflush jest kontrolowany przez kilka parametrów w /proc/sys/vm:

  • /proc/sys/vm/dirty_writeback_centisecs(domyślnie 500): w setnych sekundach. To ustawienie wskazuje, jak często pdflush wznawia zapisywanie danych na dysku. Domyślnie 2 wątki są wznawiane co 5 sekund.
    Może wystąpić nieudokumentowane zachowanie, które udaremnia próby zmniejszenia dirty_writeback_centisecs, aby umożliwić procesowi pdflush bardziej agresywne buforowanie danych. Na przykład w wcześniejsze wersje W jądrze Linuksa 2.6, w pliku mm/page-writeback.c, kod zawierał logikę mówiącą, że „jeśli zapis na dysk trwa dłużej niż parametr dirty_writeback_centisecs, ustaw interwał na 1 sekundę”. Logika ta opisana jest jedynie w kodzie jądra, a jej działanie zależy od wersji jądra Linuksa. Ponieważ nie jest to zbyt dobre, będziesz chroniony przed zmniejszeniem tego parametru.
  • /proc/sys/vm/dirty_expire_centisekundy(domyślnie 3000): w setnych sekundach. Ten parametr określa, jak długo dane mogą pozostać w pamięci podręcznej, zanim będą musiały zostać zapisane na dysku. Wartość domyślna jest bardzo długa: 30 sekund. Oznacza to, że kiedy normalne działanie Dopóki w pamięci podręcznej nie zostanie zapisana wystarczająca ilość danych, aby wywołać inną metodę pdflush, Linux nie zapisze danych na dysku, który znajduje się w pamięci podręcznej krócej niż 30 sekund.
  • /proc/sys/vm/dirty_background_ratio(domyślnie 10): Maksymalny procent BARAN, który może zostać wypełniony przez pamięć podręczną strony przed zapisaniem danych na dysk. Niektóre wersje jądra Linuksa mogą ustawić ten parametr na 5%.

    Większość dokumentacji opisuje ten parametr jako procent całkowitej pamięci RAM, ale zgodnie z kody źródłowe Jądro Linuksa nie. Patrząc na meminfo, parametr dirty_background_ratio jest obliczany z wartości MemFree + buforowane - zmapowane. Zatem w naszym systemie demonstracyjnym 10% to trochę mniej niż 250 MB, ale nie 400 MB.

Razem: Kiedy pdflush rozpoczyna nagrywanie?

W konfiguracji domyślnej dane zapisane na dysku pozostają w pamięci do czasu:

  • pozostają w pamięci dłużej niż 30 sekund;
  • strony buforowane zajmują więcej niż 10% pamięci roboczej.

Jeśli operacje zapisu na serwerze odbywają się często, pewnego dnia zostanie osiągnięty parametr dirty_background_ratio i będzie można zobaczyć, że wszystkie zapisy na dysku przechodzą tylko przez ten parametr, bez czekania na wygaśnięcie parametru dirty_expire_centisekundy.

Proces pisania strony

Parametr /proc/sys/vm/dirty_ratio(domyślnie 40): Maksymalny procent całkowitej pamięci RAM, który można przydzielić do pamięci podręcznej strony, zanim pdflush zapisze dane na dysku.

Notatka: Podczas zapisu na dysk wszystkie procesy są blokowane przed zapisem, nie tylko ten, który zapełnił bufor zapisu. Może to spowodować zablokowanie przez jeden proces wszystkich operacji we/wy w systemie. Wykonaj to

Zalecenia dotyczące optymalizacji systemu Linux pod kątem operacji wymagających częstego rejestrowania

Zwykle ludzie, którzy próbują zwiększyć produktywność podsystem dyskowy napotkałem problem polegający na tym, że Linux buforuje zbyt dużo informacji na raz. Jest to szczególnie trudne w przypadku operacji wymagających synchronizacji systemu plików przy użyciu wywołań fsync. Jeśli podczas takiego połączenia w pamięci podręcznej znajduje się dużo danych, system może się zawiesić do czasu zakończenia tego połączenia.
Inny powszechny problem występuje, ponieważ przed rozpoczęciem zapisu na dysku fizycznym trzeba zapisać zbyt wiele danych, operacje we/wy występują częściej niż podczas normalnej pracy. Otrzymasz dłuższe okresy, w których nie będą wykonywane żadne zapisy na dysku, dopóki duża pamięć podręczna nie zostanie zapełniona, w którym to momencie zostanie uruchomiony jeden z wyzwalaczy pdflush i dane zostaną zapisane z maksymalną szybkością.

współczynnik brudnego_tła: Główne narzędzie do regulacji, zwykle zmniejsza ten parametr. Jeśli Twoim celem jest zmniejszenie ilości danych przechowywanych w pamięci podręcznej, tak aby dane były zapisywane na dysku stopniowo, a nie wszystkie na raz, najskuteczniejszym sposobem będzie zmniejszenie tego parametru. Wartość domyślna jest bardziej akceptowalna w przypadku systemów z dużą ilością pamięci RAM i wolnymi dyskami.

brudny_stosunek: Drugi najważniejszy parametr do skonfigurowania. Jeśli to ustawienie zostanie znacznie zmniejszone, aplikacje wymagające zapisu na dysku zostaną całkowicie zablokowane.

brudne_expire_centisecs: Spróbuj go zmniejszyć, ale niewiele. Pozwala skrócić czas spędzany przez strony w pamięci podręcznej przed zapisaniem na dysk, ale to znacznie skróci średnia prędkość nagrywanie na dysk, ponieważ jest mniej wydajny. Będzie to szczególnie zauważalne w systemach z wolnymi dyskami.

Instrukcje dotyczące ustawiania parametrów

Gęsiego /etc/sysctl.conf Wpisujemy np.:

Vm.dirty_background_ratio = 10 vm.dirty_ratio = 40

Następnie synchronizujemy dane pamięci podręcznej i dysku, czyścimy pamięć podręczną i zapisujemy ustawienia.

Synchronizuj; echo 3 > /proc/sys/vm/drop_caches; sysctl -str

Jeśli chodzi o optymalizację wydajności systemu Linux, najważniejszym czynnikiem jest pamięć fizyczna. Naturalnie Linux oferuje wiele opcji kontrolowania wykorzystania cennych zasobów pamięci. Różne narzędzia różnią się pod względem szczegółowości monitorowania (np. ogólnosystemowe, na proces, na użytkownika), interfejsu (np. graficznego, wiersz poleceń, ncurses) lub tryb działania (np. interaktywny, tryb wsadowy).

Oto częściowa lista programów GUI lub wiersza poleceń, które dają duży wybór do sprawdzania używanej i wolnej pamięci na platformach Linux.

1. /proc/meminfo

Najłatwiejszym sposobem sprawdzenia użycia pamięci RAM jest użycie /proc/meminfo. Ten dynamicznie aktualizowany plik wirtualny jest w rzeczywistości źródłem informacji o wyświetlaniu dla wielu innych narzędzi związanych z pamięcią, takich jak darmowe, topowe i ps narzędzia. Od dostępnej ilości/ pamięć fizyczna do ilości bufora, który ma zostać ponownie zapisany na dysku, /proc/meminfo zawiera wszystko, co chcesz wiedzieć o użyciu pamięć systemowa. Informacje o pamięci procesu są również dostępne w /proc/ /statm i /proc/ /status

$ kot /proc/meminfo

2. na górze

Polecenie atop to interaktywny system oparty na ncurses i obserwator procesów dla środowiska terminala. Pokazuje, że jest dynamicznie aktualizowany krótka informacja o źródłach systemowych (procesor, pamięć, sieć, we/wy, jądro) z kolorowymi ostrzeżeniami w przypadku dużego obciążenia systemu. Może także sortować procesy (lub użytkowników) według największego zużycia zasobów, dzięki czemu: administrator systemu może stwierdzić, który proces lub użytkownik jest odpowiedzialny za uruchomienie systemu. Raporty statystyczne dotyczące pamięci obejmują pamięć całkowitą/wolną, pamięć podręczną/buforowaną oraz informacje o pamięci. pamięć wirtualna.

$ sudo na górze

3. za darmo

Bezpłatne polecenie to szybki i łatwy sposób na uzyskanie przeglądu wykorzystania pamięci z /proc/meminfo. Pokazuje migawkę całkowitej/dostępnej pamięci fizycznej i wymiany systemu, a także używanego/wolnego miejsca w buforze w jądrze.

4. Monitor systemu GNOME

Monitor systemu GNOME jest aplikacja graficzna co jest pokazane krótka historia wykorzystanie zasobów systemowych dla procesora, pamięci, przestrzeni wymiany i sieci. Oferuje także proces monitorowania wykorzystania procesora i pamięci.

$gnome-system-monitor

5.htop

Polecenie htop to interaktywna przeglądarka procesów oparta na ncurses, która pokazuje wykorzystanie pamięci przez proces w czasie rzeczywistym. Może raportować wielkość pamięci procesu w pamięci głównej (RSS), całkowity rozmiar programu w pamięci, rozmiar biblioteki, całkowity rozmiar strony i rozmiar brudnej strony (w pamięci podręcznej) dla wszystkich uruchomionych procesów. Możesz przewijać w poziomie lub w pionie (posortowaną) listę wszystkich procesów.

6. Monitor systemu KDE

Chociaż pulpit GNOME ma Monitor systemu GNOME, pulpit KDE ma swój własny odpowiednik: Monitor systemu KDE. Jego funkcjonalność jest w większości podobna do wersji GNOME, tj. Pokazuje w czasie rzeczywistym historię wykorzystania zasobów systemowych, a także zużycie procesora/pamięci przez poszczególne procesy.

$ksysguard

7. memstat

Narzędzie memstat jest przydatne do identyfikowania procesów wykonywalnych i bibliotek współdzielonych zużywających pamięć wirtualną. Uzyskując identyfikator procesu, memstat ujawnia, ile pamięci wirtualnej jest wykorzystywane przez kod wykonywalny, dane i biblioteki współdzielone powiązane z tym procesem.

$ memstat -p

8.nmon

Narzędzie nmon to narzędzie do testowania systemu oparte na ncurses, które monitoruje procesor, pamięć, operacje we/wy dysku, jądro, system plików i źródła sieciowe interaktywnie. Na podstawie zużycia pamięci może wyświetlać w czasie rzeczywistym takie informacje, jak pamięć całkowita/wolna, przestrzeń wymiany, pamięć buforowana/buforowana, statystyki załadowanej/wyładowanej pamięci wirtualnej.

9.ps

Komenda ps może pokazać wykorzystanie pamięci poszczególnych procesów w czasie rzeczywistym. Wyświetlane informacje o zużyciu pamięci obejmują %MEM (procent wykorzystanej pamięci fizycznej), VSZ (całkowita ilość wykorzystanej pamięci wirtualnej) i RSS (całkowita ilość wykorzystanej pamięci fizycznej). Możesz posortować listę procesów za pomocą opcji „–sort”. Na przykład, aby posortować w malejącej kolejności RSS:

$ ps aux --sort -rss

10. smem

Komenda smem pozwala zmierzyć wykorzystanie pamięci fizycznej przez różne procesy i użytkowników na podstawie informacji dostępnych w /proc. To narzędzie używa metryki proporcjonalnie ustalony rozmiar(PSS), aby dokładnie oszacować wykorzystanie procesu Rozmiar Linuksa efektywna pamięć. Analizę wykorzystania pamięci można wyeksportować do graficznych wykresów słupkowych i plasterkowych.

$ sudo smem --nazwa ciasta -c „pss”

11. góra

Najlepsze polecenie oferuje monitorowanie uruchomionych procesów w czasie rzeczywistym wraz z różnymi statystykami procesów dotyczącymi wykorzystania zasobów. Informacje związane z pamięcią obejmują %MEM (procent wykorzystanej pamięci), VIRT (całkowita ilość wykorzystanej pamięci wirtualnej), SWAP (ilość zamienionej pamięci wirtualnej), CODE (ilość pamięci fizycznej przydzielonej do wykonania kodu), DATA (ilość pamięci fizycznej pamięć przydzielona na dane niewykonywalne), RES (całkowita ilość wykorzystanej pamięci fizycznej, KOD+DANE) i SHR (ilość pamięci potencjalnie współdzielonej z innymi procesami). Listę procesów można sortować według użycia lub rozmiaru pamięci.

12. vmstat

Narzędzie wiersza poleceń vmstat wyświetla natychmiastowe i średnie statystyki dotyczące różnych działań systemu, w tym procesora, pamięci, przerwań i operacji we/wy dysku. Jako źródło informacji o pamięci, polecenie to pokazuje nie tylko wykorzystanie pamięci fizycznej (np. pamięć całkowita/używana i bufor pamięci/pamięć podręczna), ale także statystyki pamięci wirtualnej (np. załadowane strony/pamięć stronicowana, stronicowana/załadowana).

Narzędzie wiersza poleceń vmstat wyświetla chwilowe i średnie statystyki różnych działań systemu, obejmujące procesor, pamięć, przerwania, i dysk We/Wy. Jeśli chodzi o informacje o pamięci, polecenie pokazuje nie tylko wykorzystanie pamięci fizycznej (np. pamięć całkowitą/używaną i pamięć buforową/pamięć podręczną), ale także statystyki pamięci wirtualnej (np. pamięć przywoływana/wywoływana, wymieniana/wyłączana).

$ vmstat -s

Jak każdy inny system operacyjny, Linux jest bardzo wydajny pod względem pamięci. Dostępna pamięć jest swobodnie rozdzielana pomiędzy procesami, nieużywane strony są opróżniane do partycji wymiany na dysku, a w przypadku przepełnienia pamięci uruchamiany jest specjalny mechanizm wbudowany w jądro, który analizuje wszystkie procesy i niszczy winowajcę.

Gdy dowolny proces zapisuje dane na dysk, jądro przechowuje je w osobnej pamięci podręcznej. Bardzo często ta pamięć podręczna zajmuje dość dużo miejsca.

JAK ZWOLNIĆ PAMIĘĆ W Linuksie
W każdym Dystrybucja Linuksa Możesz użyć trzech poleceń, aby wyczyścić pamięć podręczną systemu Linux. Co więcej, nie musimy przeprowadzać żadnych procesów. Oto polecenia:

Czyszczenie PageCache:

Synchronizuj; echo 1 > /proc/sys/vm/drop_cache

Czyszczenie i-węzła i dentrie:

Synchronizuj; echo 2 > /proc/sys/vm/drop_cache

Czyszczenie i-węzła i dentrie oraz PageCache:

Synchronizuj; echo 3 > /proc/sys/vm/drop_cache

Przed uruchomieniem któregokolwiek z tych poleceń uruchom:

Jest to konieczne, ponieważ każde polecenie wymaga do działania uprawnień administratora. Przyjrzyjmy się teraz, co się stanie, gdy te polecenia zostaną wykonane.

Narzędzie do synchronizacji wymusza na systemie zapisanie na dysk wszystkich danych znajdujących się w pamięci podręcznej, ale jeszcze niezapisanych. Jest to konieczne, aby zwolnić jak najwięcej pamięci. Domyślnie dane nie są usuwane z pamięci podręcznej po zapisaniu na dysk; jest to konieczne, aby w razie potrzeby program mógł je szybciej odczytać.

Jeśli nie wykonamy polecenia synchronizacji, zwolnimy również trochę miejsca, ale po jego wykonaniu wynik będzie lepszy.

Symbol podziału; mówi powłoce, aby przed wykonaniem kolejnego polecenia poczekała, aż zakończy się pierwsze polecenie. Ostatnie polecenie echo 1 > /proc/sys/vm/drop_caches zapisuje wartość 1 do pliku /proc/sys/vm/drop_caches. To sygnalizuje jądru, że musimy wyczyścić wybrany typ pamięci podręcznej.

TYPY Pamięci podręcznej w systemie Linux
Przyjrzyjmy się teraz typom pamięci podręcznych, które pozwalają wyczyścić te polecenia i jak to wszystko działa.

Pamięć podręczna strony lub pamięć podręczna strony to miejsce, w którym jądro umieszcza wszystkie dane, które zapisałeś na dysku lub odczytałeś z dysku. To znacznie przyspiesza system, ponieważ jeśli program będzie potrzebował tych samych danych po raz drugi, zostaną one po prostu pobrane z pamięci RAM. Ale z tego powodu ta pamięć podręczna zajmuje najwięcej miejsca.

Możesz sprawdzić rozmiar pamięci podręcznej strony za pomocą bezpłatnego narzędzia. Tutaj jest to pokazane w ostatniej kolumnie - w pamięci podręcznej:

Ten typ pamięci podręcznej jest najskuteczniejszy i najbezpieczniejszy do czyszczenia.

Pamięć podręczna i-węzła i dentrie dotyczy także systemu plików. Tyle że zapisywane są w nim nie same dane, ale struktura systemu plików, lokalizacja plików i folderów. Na pytanie o lokalizację pliku lub zawartość folderu jądro generuje specjalne struktury, które zawierają wszystkie te informacje. Przy następnym żądaniu struktury będą już zapisane w pamięci. Każdy system plików ma własną pamięć podręczną i-węzłów i współdzieloną pamięć podręczną Dentrie.

Ta pamięć podręczna zajmuje bardzo mało pamięci. Dane prezentowane są w bajtach i jak widać są bardzo małe. Możesz go wyświetlić za pomocą polecenia:

Kot /proc/slabinfo | egrep dentry\|i-węzeł


Nie zaleca się jego czyszczenia, aby zwolnić pamięć systemu Linux, ponieważ zużywa się mało pamięci i powoduje skanowanie nowego pliku nadchodzi system stosunkowo długi czas.

CZY W ogóle musisz wyczyścić pamięć podręczną?
Po pierwsze, jeśli używane jest dużo pamięci, możesz wyczyścić pamięć podręczną strony, szczególnie jeśli to pamięć podręczna strony zajmuje dużo pamięci. Po drugie, może być konieczne wyczyszczenie pamięci podręcznej systemu Linux, jeśli zmieniłeś jakiekolwiek ustawienia systemu plików lub jądra, a teraz chcesz sprawdzić, jak wpłynęło to na szybkość operacji odczytu/zapisu. W takim przypadku możesz wyczyścić wszystkie pamięci podręczne i zrobić to bez ponownego uruchamiania, co jest bardzo wygodne.

System operacyjny Linux jest zaprojektowany w taki sposób, że przed uzyskaniem dostępu do dysku zostanie przejrzana pamięć podręczna dysku i jeśli będą tam potrzebne dane, dostęp do dysku nie będzie możliwy. Jeśli wyczyścisz pamięć podręczną Linuksa, system operacyjny będzie działał nieco wolniej, ponieważ będzie musiał szukać danych na dysku.

AUTOMATYCZNE CZYSZCZENIE PAMIĘCI PODRĘCZNEJ
Przyjrzyjmy się, jak automatycznie czyścić pamięć podręczną codziennie o drugiej w nocy za pomocą harmonogramu zadań cron.

Najpierw utwórzmy skrypt bash o następującej treści:

Sudo w /usr/local/bin/clearcache.sh

Synchronizuj; echo 1 > /proc/sys/vm/drop_cache

Wyczyścimy tylko pamięć podręczną strony, ponieważ zajmuje ona najwięcej. Nie będziemy dotykać innych typów, aby niepotrzebnie nie zmniejszać wydajności systemu.

Sudo chmod 755 /usr/local/bin/clearcache.sh

Pozostaje tylko dodać zadanie do harmonogramu cron. Aby to zrobić, uruchom polecenie:

Sudo crontab -e

W otwartym edytorze dodaj linię:

0 2 * * * /usr/local/bin/clearcache.sh

Teraz ten skrypt będzie uruchamiany co noc i czyści pamięć, aby serwer mógł działać normalnie.

USTAWIANIE ROZMIARU PAMIĘCI PODRĘCZNEJ
O wiele wygodniej jest nie czyścić pamięci podręcznej za każdym razem, ale ustawić limit, po przekroczeniu sam system usunie dodatkowe strony. Nie można jawnie ograniczyć liczby megabajtów, które system może wykorzystać na pamięć podręczną. Cała dostępna pamięć zostanie wykorzystana w miarę potrzeb, ale można dostosować szybkość usuwania wygasłych stron z pamięci podręcznej.

Odpowiada za to plik /proc/sys/vm/vfs_cache_ Pressure. Zawiera względną miarę tego, jak agresywnie należy usuwać strony z pamięci podręcznej. Domyślnie parametr jest ustawiony na 100. Jeśli go zmniejszysz, jądro będzie rzadziej usuwać strony, co doprowadzi do bardzo szybkiego zwiększenia pamięci podręcznej. Jeśli ustawione na zero, strony w ogóle nie zostaną usunięte. Jeśli wartość jest większa niż 100, rozmiar pamięci podręcznej będzie rósł wolniej, a nieużywane strony zostaną natychmiast usunięte.

Na przykład ustalmy minimalny rozmiar pamięci podręcznej:

Echo 1000 > /proc/sys/vm/vfs_cache_ Pressure

Nie zapominaj, że znacznie obniży to wydajność Twojego systemu, ponieważ dane będą odczytywane z dysku, a nie z pamięci podręcznej.

JAK WYCZYŚCIĆ PAMIĘĆ SWAP
Czyszczenie przestrzeni wymiany jest bardzo łatwe. Aby to zrobić, uruchom:

Zamień -a && Zamień -a

Należy pamiętać, że po wyczyszczeniu wymiany wszystkie dane zostaną przeniesione z powrotem do pamięci RAM.

WNIOSKI
To wszystko. Już wiesz, żeby wyczyścić pamięć podręczna Linuksa i zwolnij pamięć Wszystkie polecenia muszą być wykonywane jako superużytkownik, w przeciwnym razie nic nie będzie działać.

W Linuksie prawie wszystkie polecenia bez graficzny interfejs użytkownika. Podczas pracy na serwerach dostępowych tylko powłoka. Dlatego dzisiaj pokażemy polecenia, za pomocą których można sprawdzić wykorzystanie pamięci System Linux. Pamięć obejmuje RAM i wymianę.

Często ważne jest sprawdzenie wykorzystania pamięci współdzielonej i procesowej na serwerach, a także niewykorzystanych zasobów. Jeśli używasz serwera WWW, musi on mieć wystarczającą ilość pamięci, aby obsługiwać odwiedzających witrynę. Jeśli tak nie jest, witryna będzie bardzo wolno działać lub nawet stanie się niedostępna w przypadku gwałtownego wzrostu ruchu, po prostu dlatego, że nie będzie wystarczającej ilości pamięci. To samo, co dzieje się na komputerze stacjonarnym.

1. Bezpłatne polecenie

Bezpłatne polecenie jest najprostszym i najłatwiejszym w użyciu poleceniem sprawdzającym wykorzystanie pamięci w systemie Linux. Oto krótki przykład

$ wolne -m łącznie wykorzystane wolne współdzielone bufory w pamięci podręcznej Mem: 7976 6459 1517 0 865 2248 -/+ bufory/pamięć podręczna: 3344 4631 Zamiana: 1951 0 1951

Opcja -M wyświetla wszystkie dane w megabajtach. Łączna ilość pamięci RAM zainstalowanej w systemie wynosi 7976 MB, czyli 8 GB. Kolumna używany pokazuje ilość pamięci RAM, którą można wykorzystać w systemie Linux, w naszym przypadku będzie to około 6,4 GB. Haczyk tkwi w głośnikach buforowane I bufory. Druga linia mówi, że 4,6 GB jest bezpłatne. Jest to wolna pamięć w pierwszej linii z dodatkiem buforów i pamięci podręcznej.

Linux ma zwyczaj buforowania w celu poprawy wydajności, dzięki czemu można zwolnić pamięć i wykorzystać ją w razie potrzeby.
Ostatnia linia to zamiana pamięci ( zamieniać), co w tym przypadku jest całkowicie bezpłatne.

2. /proc/meminfo

Następnym sposobem sprawdzenia zużycia pamięci jest odczytanie pliku /proc/meminfo. Wiedz o tym system plików/proc nie zawiera żadnych prawdziwych plików. Są pliki wirtualne, które zawierają dynamiczne informacje o jądrze i systemie.

$ cat /proc/meminfo MemTotal: 8167848 kB MemFree: 1409696 kB Bufory: 961452 kB Buforowane: 2347236 kB SwapCached: 0 kB Aktywne: 3124752 kB Nieaktywne: 2781308 kB Aktywne (anon): 2603376 kB Nieaktywne (anon): 3 09 056 kB Aktywny ( plik): 521376 kB Nieaktywny (plik): 2472252 kB Nieunikniony: 5864 kB Mlocked: 5880 kB SwapTotal: 1998844 kB SwapFree: 1998844 kB Brudny: 7180 kB Writeback: 0 kB AnonPages: 2603272 kB Mapowane: 78838 0 kB Szmem: 311596 kB Płyta : 200468 kB SReclaimable: 151760 kB SUUnreclaim: 48708 kB KernelStack: 6488 kB PageTables: 78592 kB NFS_Unstable: 0 kB Odbicie: 0 kB WritebackTmp: 0 kB CommitLimit: 6082768 kB Committed_AS: 9397536 kB Vmal locTotal: 34359738367 kB VmallocUsed: 420204 kB VmallocChunk: 34359311104 kB HardwareCorrupted: 0 kB AnonHugePages: 0 kB HugePages_Total: 0 HugePages_Free: 0 HugePages_Rsvd: 0 HugePages_Surp: 0 Hugepagesize: 2048 kB DirectMap4k: 62464 kB DirectMap2M: 8316928 kB

Jądro Linuksa zostało zaprojektowane w taki sposób, że pamięć w danym system operacyjny używany z oczekiwaniem maksymalna wydajność cały system. I tutaj warto porównać dwie pamięci: wolną i szybką - RAM i pamięć dysk twardy(dysk SSD). Szybkość odczytu/zapisu pamięci RAM jest znacznie wyższa niż prędkość dostępu do dysku twardego. Oznacza to, że nasuwa się bardzo elementarny wniosek: lepiej czytać z pamięci RAM niż ten sam plik z dysku twardego. Jednak biorąc pod uwagę ograniczoną ilość pamięci RAM, nie da się przechowywać wszystkiego w pamięci RAM, ponieważ głównym celem pamięci RAM jest praca z aplikacjami.

Jak Linux (CentOS) wykorzystuje pamięć RAM

Wróćmy do projektu Linuksa (CentOS), który buforuje w pamięci RAM wszystkie pliki, których zażądano od uruchomienia komputera. Nazywa się to pamięcią podręczną plików CentOS i jest głównym winowajcą wszystkich krzyków i przekleństw na temat Linuksa pochłaniającego całą pamięć RAM. Oczywiście, gdy pamięć RAM się zapełni, mało używane pliki zostaną wyrzucone i nadpisane nowymi, a także opróżnią pamięć podręczną plików do rozmiaru żądanego przez aplikacje. Aby uzyskać dokładną analizę sytuacji, oto wynik działania top z mojego serwera:

Nas będą interesować dwie ostatnie linie. Linia Pamięć: pokazuje użycie pamięci RAM. Pierwsza wartość z podpisem całkowity wskazuje, że używany jest system z 2 GB pamięci RAM. Następna jest wartość ponad 500 MB z postscriptem używany, który wskazuje, ile pamięci jest aktualnie zajęte. Po tym następuje wartość z dopiskiem bezpłatny, co oznacza wolną pamięć. Dalsze postscriptum bufory- coś związanego z buforami czy czymś takim (jeszcze nie jest to poważne obciążenie w tym artykule). A najciekawsze jest ostatnie zdanie z ostatniej linijki z dopiskiem buforowane— pokazuje, ile pamięci zużyto na pamięć podręczną plików, co zostało omówione tuż powyżej.

Na podstawie powyższego ekranu okazuje się, że pamięć RAM jest zapełniona 530MB i do dalszego wykorzystania pozostaje tylko 1,4 GB pamięci (powyższy ekran nie opisuje zbyt dobrze piękna pamięci podręcznej plików, gdy po kilku godzinach pracy komputera pracy pamięć RAM jest zapełniona w 90-95 procentach Tutaj zrzut ekranu z pracy po kilku minutach od włączenia komputera.

Jednak w rzeczywistości 1,65 GB pamięci jest wolne, co wychodzi, jeśli dodasz razem wolną pamięć i pamięć podręczną. Dzieje się tak ze względu na fakt, że pamięć podręczna plików CentOS przydzieli zajęte miejsca w pamięci RAM, jeśli potrzebuje tego jakaś aplikacja lub sam system. Tym samym na aplikacje i system operacyjny (w tej chwili) można przeznaczyć kolejne 250 MB, które obecnie jest wykorzystywane na pamięć podręczną plików.

Dlatego też, gdy w wolnym polu zobaczysz niepokojąco małe wartości, nie zapomnij dodać do tego wartości pola buforowanego. Wtedy otrzymasz całkowita ilość wolnej pamięci RAM. Na tej podstawie ogólnie można odmówić jakichkolwiek zmian w działaniu Linuksa (CentOS), ponieważ działania systemu operacyjnego nie są zbyt agresywne, a bardzo potrzebna pamięć RAM dla Twoich aplikacji będzie zawsze dostępna.

Problemy ze zbyt dużą pamięcią podręczną plików

Jednak z własnego doświadczenia powiem, że gdy więcej niż 90-95% całkowitej pamięci RAM zostanie przeznaczone na pamięć podręczną plików wraz z aplikacjami, wówczas dalsza praca cały system nieco spowalnia. Odkąd konfigurowałem serwer WWW, najlepszym wskaźnikiem jest tutaj wydajność witryn, która zaczyna słabnąć, gdy pamięć RAM jest prawie pełna. Ponadto zauważono, że gdy pamięć RAM jest pełna, praca wzrasta centralny procesor, który stale decyduje, co wyrzucić z RAM-u, a co tam dodać. Dlatego zdecydowano ogranicz maksymalny rozmiar pamięci podręcznej plików CentOS.

Czyszczenie pamięci podręcznej plików CentOS

W tym kierunku wielu sugeruje ręczne wyczyszczenie pamięci podręcznej plików i aby zautomatyzować ten proces, napisz zadanie do cron i uruchamiaj je raz dziennie lub raz na kilka godzin. Aby uzyskać pełniejszy obraz, oto polecenie:

sh -c „echo 1 > /proc/sys/vm/drop_cache”

Polecenie naprawdę spełnia swoje zadanie, a pamięć podręczna plików zostaje całkowicie wyczyszczona. Ale natychmiast zaczyna się ponownie uzupełniać i wkrótce ponownie wypełni całe wolne miejsce na dysku. Ale jest inne rozwiązanie.

Limit rozmiaru pamięci podręcznej plików

Aby to zrobić musimy zmienić wartość w pliku /proc/sys/vm/min_free_kbytes na wartość, której nie chcesz przydzielać do pamięci podręcznej plików. Innymi słowy, rozmiar pamięci RAM określony w KB zawsze pozostanie pusty i nie będzie zajęty przez pamięć podręczną plików. Szczerze mówiąc, nie znalazłem bardziej szczegółowego materiału, który dokładnie mówiłby, jak działa ten parametr:

  1. Czy pozostawia określoną ilość dla aplikacji i systemu w oparciu o całkowitą ilość pamięci RAM? Lub
  2. Czy pozostawia określoną kwotę na aplikacje i system oparty na wolnej pamięci RAM?

Ja sam skłaniam się do drugiej opcji, ponieważ pamięć podręczna plików domyślnie ma niższy priorytet niż aplikacje i dlatego przy pierwszym żądaniu rezygnuje z okupowanych terytoriów.

Wróćmy jednak do pliku, dla którego ustawiłem wartość na 700000, czyli 700 MB. Natychmiast po zmianie zauważysz zmiany, ponieważ pamięć podręczna plików zostanie opróżniona na tyle, aby dostosować się do nowych wymagań. Stan ten będzie jednak trwał tylko do następnego restartu i dlatego musimy skonsolidować nasze działania. W tym celu do pliku /etc/sysctl.conf dodaj linię

vm.min_free_kbytes=700000

Oczywiście musisz tutaj podać swoją wartość. Możesz ponownie uruchomić komputer i sprawdzić plik /proc/sys/vm/min_free_kbytes którego wartość nie powinna zmienić się na wartość domyślną.

W ten sposób można ograniczyć maksymalny rozmiar, jaki można przydzielić w pamięci RAM na potrzeby pamięci podręcznej plików.



Jeśli zauważysz błąd, zaznacz fragment tekstu i naciśnij Ctrl+Enter
UDZIAŁ: