Co to jest pamięć wymiany?

26

Używam pamięci RAM do przechowywania niektórych moich tabel bazy danych, a inne są przechowywane na dysku twardym.

Dziś dowiedziałem się, że moje procesy używają pamięci wymiany. Co to jest pamięć wymiany i jak mogę wykryć, który proces korzysta z pamięci wymiany i jak mogę je zatrzymać?

030
źródło
czy nie ma sposobu, aby dowiedzieć się, które procesy wykorzystują pamięć wymiany ???
spójrz na menedżera zadań systemu Windows (lub podobne narzędzia) pod kątem ilości użytego pliku strony i błędów strony.
Zamiana nie jest procesem na proces, dotyczy całego systemu operacyjnego. „vmstat” pokaże informacje o tym, ile wymiany używasz.
jrockway
Pracuję na Linuksie, a nie na Wimdows
dostałem przyczynę tego zamiany ..... ktoś próbował przeanalizować moją stronę, dlatego cały ten proces odbywał się bez żadnej przyczyny z naszej strony. Dzięki wszystkim odpowiedziom pomógł mi jak zawsze :-)

Odpowiedzi:

41

Jeśli zabraknie pamięci fizycznej, używasz pamięci wirtualnej, która przechowuje dane w pamięci na dysku. Odczytywanie z dysku jest kilka rzędów wielkości wolniejsze niż odczytywanie z pamięci, więc spowalnia wszystko. (Wymiana danych między pamięcią rzeczywistą a pamięcią wirtualną to „zamiana”. Przestrzeń na dysku to „przestrzeń wymiany”.)

Jeśli Twoja aplikacja korzysta z funkcji wymiany, musisz albo użyć mniej pamięci, albo kupić więcej pamięci RAM.

(Zamiana jest przydatna, ponieważ nieużywane aplikacje można przechowywać na dysku do momentu ich użycia. Następnie można je „wczytać” i uruchomić ponownie normalnie. Chociaż nie ma go w pamięci, system operacyjny może z niego korzystać na coś innego, np. pamięć podręczną dysku. Jest to więc bardzo przydatna funkcja, ale jeśli nie masz wystarczającej ilości pamięci fizycznej do uruchomienia programu, zdecydowanie potrzebujesz więcej pamięci. Na szczęście pamięć jest naprawdę bardzo tania.)

jrockway
źródło
1
Dla zachowania poprawności: pamięć wirtualna oznacza korzystanie z adresów pamięci wirtualnej (coś, co jest zawsze włączone w nowoczesnym procesorze, bez względu na to, ile masz dostępnej pamięci RAM) i nie jest bezpośrednio związane z zamianą (chociaż są one używane w kombinacji, są one zasadniczo różne koncepcje).
fortran
@fortran, dla podwójnej poprawności, pamięć wirtualna jest terminem używanym przez system Windows, gdy odnosi się do pliku stronicowania (wymiany) .
sleblanc
7

Komputer ma pewną ilość pamięci fizycznej. Ale przez większość czasu chcemy więcej. Wymieniamy więc trochę pamięci na dysku.

Za każdym razem, gdy potrzebujemy tej pamięci, należy ją zamienić z powrotem w pamięć (zamienić inny kawałek). Istnieją niezwykle inteligentne algorytmy, aby zminimalizować opóźnienie, ale wciąż czasami musimy czekać.

W systemie Windows, jeśli spojrzysz na menedżera zadań, możesz pokazać błędy strony kolumny. To pokazuje, ile razy aplikacja prosi o kawałek pamięci, który był na dysku i wymaga wymiany. Wiele błędów strony = powolna aplikacja.

Ten proces jest wykorzystywany na kilku poziomach. Podsumowanie od szybkiego do wolnego:

  • Na poziomie procesora istnieją rejestry. Są to najszybsze pamięci, ale ilość jest ograniczona.
  • Również na procesorze znajduje się niewielka pamięć podręczna. Tutaj przechowywany jest niewielki fragment uruchomionego programu w celu szybkiego dostępu. Wyszukaj algorytmy przewidywania gałęzi, jeśli chcesz dowiedzieć się więcej.
  • Czasami między procesorem a pamięcią główną znajdują się pamięci podręczne poziomu 2.
  • Następny poziom to pamięć główna (RAM).
  • Ostatnim i najwolniejszym ze wszystkich jest dysk, czasem można użyć pamięci USB jako dodatkowej pamięci.
Toon Krijthe
źródło
3
cat /proc/pid/smaps

Jeśli nie chcesz używać wymiany, nie używaj partycji wymiany (skomentuj wiersz w środku /etc/fstab), ale uniemożliwi to rozpoczęcie nowego procesu i spowoduje awarię malloc, jeśli zabraknie pamięci fizycznej. Zasadniczo nie jest to dobry pomysł ... niezbyt bezpieczny i nawet niezbyt przydatny, ponieważ system operacyjny zachowa gorące strony w pamięci i zamieni na dysk te, które nie były ostatnio używane.

Innym rozwiązaniem może być zhakowanie bazy danych, aby zablokowała strony w pamięci (wiem, że można to zrobić, ale nie mogę teraz dokładnie powiedzieć, jak to zrobić), ale tak czy inaczej, baza danych będzie używać własnej wymiany i mechanizmy buforowania.

Aby dowiedzieć się, co to jest zamiana i jak działa pamięć wirtualna ... Polecam rzucić okiem na niektóre wykłady dotyczące systemu operacyjnego, być może MIT Open Courseware może pomóc.

fortran
źródło
Ponieważ domyślną konfiguracją wielu dystrybucji Linuksa jest nadpisywanie pamięci, „najgorsze”, co może się zdarzyć, to że zabójca OOM rozpocznie procesy snajperskie, najprawdopodobniej zaczynając od DBMS (i przy tabelach „przechowywanych w pamięci RAM”, co prawdopodobnie nie jest dobre rzecz).
symcbean
1

Znalazłem częściowo odpowiedź. Pamięć wymiany to miejsce na dysku twardym komputera, którego systemy operacyjne wykorzystają do umieszczenia informacji faktycznie znajdujących się w pamięci RAM w celu zwolnienia jej dla innej aplikacji. Należy to zrobić, gdy system potrzebuje pamięci na nowy proces, a nie ma jej wcale, więc możemy zobaczyć, że jeśli nasz system ma dużo pamięci RAM, być może nie będzie potrzebował pamięci SWAP.

AKTUALIZACJA

Aby dowiedzieć się, gdzie Zamień miejsce (lub pamięć wirtualną), możesz przejść do Menedżera zadań (CTRL + ALT + DEL) i włączyć w widoku -> KOLUMNY -> PAMIĘĆ WIRTUALNA. Teraz wystarczy obliczyć różnicę między użyciem pamięci a pamięcią wirtualną. Również tutaj jest instrukcja, jak to zobaczyć, jeśli używasz systemu Vista: http://www.ehow.com/how_5067693_increase-swap-space.html

faya
źródło
-1

Zamień to miejsce na dysku twardym używane jako pamięć RAM. Jest (relatywnie mówiąc) bardzo powolny, ale zapobiega awariom komputerów, gdy próbują poradzić sobie z większą ilością danych, niż jest w stanie obsłużyć ich pamięć RAM.

Aby zatrzymać proces zamiany - zainstaluj więcej pamięci RAM.

Quentin
źródło
1
Jeśli nie chcesz żadnej zamiany, przestań używać pliku strony. Ale oczekuj innych problemów.
1
To nie jest. Zamiana przenosi blok danych z dysku twardego do pamięci fizycznej. Jednorazowy odczyt, który zwykle jest wystarczająco szybki.
@xtofl odpowiedź nie wspominała o zamianie, tylko zamiana partycji, a komentarz gamecat nie miał nic wspólnego z tym, co powiedziałeś? : P
RapidWebs
-1

Jeśli nie chcesz, aby twoje procesy korzystały z pamięci wymiany, po prostu całkowicie wyłącz pamięć wymiany. Niestety, jeśli kiedykolwiek zabraknie ci pamięci, jądro Linuksa zabije niektóre z uruchomionych procesów w celu zwolnienia pamięci do użycia.

Jeśli masz wystarczającą ilość pamięci RAM dla swojego systemu, możesz faktycznie przejść bez pamięci wymiany.

Mam laptopa z 768 MB pamięci RAM, która nie korzysta z pamięci wymiany. Jest wystarczająco dobry dla moich potrzeb. Mam serwer z 256 MB pamięci RAM i nie używam pamięci wymiany. Działa bezproblemowo z 8 serwerami wirtualnymi wykorzystującymi wirtualizację OpenVZ.

Tak więc to od Ciebie zależy, czy potrzebujesz pamięci wymiany.

sybreon
źródło
W jaki sposób uruchamiasz 8 maszyn wirtualnych na maszynie z jedynie 256 megabajtami pamięci RAM?!?
warren
Jest to możliwe dzięki VZ, ponieważ pamięć RAM nie jest całkowicie podzielona na partycje, ponieważ wspólne biblioteki są współużytkowane przez maszyny wirtualne lub coś takiego. 8 x 64M niekoniecznie oznacza 512M. :)
sybreon
niemniej jednak - w jaki sposób stabilne urządzenie bazowe działa stabilnie?
warren
Wymieniając nieaktywne programy, masz więcej pamięci do buforowania plików. A to przyspiesza. ten jednorazowy odczyt jest zwykle dość szybki i ogólnie ma znikomy wpływ. nie jest używany tylko wtedy, gdy przekroczysz granice dostępnej pamięci RAM. Widziałem, że maszyny z 16 GB pamięci RAM czasami używają SWAP.
RapidWebs
ponadto nie zalecałbym wyłączania SWAP na serwerze bazy danych. Jego klienci lub aplikacja internetowa nie byliby bardzo zadowoleni, gdy OOM zabija zaplecze podczas zwykłej operacji tworzenia kopii zapasowej w nocy lub czegoś podobnego? bardziej inteligentne byłoby dostrojenie pamięci podręcznej bazy danych w zależności od użycia aplikacji i dostępnej pamięci. jeśli już zamienia, albo potrzebuje więcej pamięci RAM, albo lepiej konfiguruje swój serwer DB. w przeciwnym razie wyłączenie SWAP zmusiłoby OOM do zabicia serwera DB za każdym razem, gdy przechodzi do wymiany. które często sądzą po jego pytaniu.
RapidWebs