Dlaczego OS X używa wymiany, gdy jest dużo „nieaktywnej pamięci”?

22

Używam OS X od kilku miesięcy (Lion, a teraz Mountain Lion). Mam 8 GB na moim mini i prawie codziennie zbliżam się do tego. Na komputerze z systemem Windows 7 o pojemności 8 GB nigdy nie miałem tego rodzaju problemu. W każdym razie czytam w Internecie, że nieaktywna pamięć jest pamięcią podręczną aplikacji ostatnio zamkniętych programów i może być używana do szybszego ponownego otwarcia. W razie potrzeby tę nieaktywną pamięć można zwolnić w nowej aplikacji. Nie jest wydany. Zamiast tego OS X zaczyna zamieniać. Moje pytanie brzmi więc, dlaczego OS X używa wymiany, gdy jest dużo „nieaktywnej pamięci”? Oto ekran, który pokazuje, co mam na myśli:

wprowadź opis zdjęcia tutaj

Naprawdę mam nadzieję, że jest jakiś problem, aby OS X używał tych 2,69 GB przed rozpoczęciem zamiany. Naprawdę.

Bałczew
źródło
Tak, to dziwne. Czy jedna aplikacja zajmuje całą pamięć RAM? Być może OSX ogranicza aplikacje, aby nie zużywały więcej niż 80% pamięci RAM jednocześnie. Nieaktywny nie oznacza jednak, że jest darmowy. Jest zarezerwowane na coś.
Piotr Kula,
Nie - wiele aplikacji, przeglądarek, Eclipse itp. Z tego, co przeczytałem, jest bezpłatny, ponieważ ostatnio zamknięto pamięć podręczną aplikacji. Powinien istnieć sposób, aby OS X nie zamieniał się, gdy jest nieaktywna pamięć
Balchev
Mogę go odtworzyć w dowolnym momencie i w razie potrzeby mogę wykonać ekran monitora aktywności
Balchev
2
Nieaktywna pamięć nie jest wolną pamięcią.
kinokijuf,
2
@kinokijuf powinno jednak działać jako wolna pamięć, gdy nie ma już wolnej pamięci. Jeśli i tak nieaktywna pamięć jest zawsze zamieniana na dysk, nie ma sensu wprowadzać rozróżnienia między aktywnym a nieaktywnym.
Pieter,

Odpowiedzi:

18

Zamiana najwyraźniej miała miejsce, gdy nieaktywne strony RAM były faktycznie aktywne.

( Aktualizacja: jak wyjaśniono w komentarzu, to nie jest twój przypadek. Dlatego osoby z tym samym problemem mogą przejść do reguły poziomej ).

Tzn. Masz uruchomionych wiele programów, a jądro zamieniło niektóre strony. Potem opuściłeś niektóre programy. Jądro oznacza strony RAM jako nieaktywne. Ale nie zamieni stron z powrotem do pamięci RAM, dopóki te strony nie będą potrzebne. Powoduje to, że strony są zarówno nieaktywne, jak i zamienione.

Dlaczego nie zapobiegawczo zamienić strony? Ponieważ byłoby to obstawianie przeciwko kursowi: na dłuższą metę przegrywasz. Pomyślmy o uproszczonym przykładzie: dwa programy A i B, które nie mieszczą się w pamięci RAM jednocześnie. Program A nadal działa, a wszystkie zamienione strony należą do A. Program B został zamknięty, a wszystkie nieaktywne strony należą do B.

Jeśli jądro zapobiegawczo zamienia strony A i natychmiast po:

  • program A musi uzyskać dostęp do swoich stron -> Wygrywasz - strony są już w pamięci RAM.
  • ponownie uruchamiasz B -> przegrywasz - "zapłaciłeś" koszt przeniesienia stron do pamięci RAM i teraz musisz je odesłać.
  • uruchamiasz inny program C -> Przegrywasz, jeśli A i C nie mieszczą się jednocześnie w pamięci RAM. Jeśli pasują, jesteś równy.

Weź również pod uwagę, że zamiana (zapis na dysk) jest droższa niż zamiana (odczyt z dysku). Co sprawia, że ​​ten „zakład” jest jeszcze bardziej nieaktywny.

Krótko mówiąc: zaufaj swojemu jądru i nie próbuj go przechytrzyć.


Aktualizacja: okazuje się, że nieaktywna pamięć nie działa, ponieważ artykuł Korzystanie z Monitora aktywności do czytania artykułu Pamięć systemowa spowodował, że wiele osób uważa, że ​​działa. Definicja podana w artykule dla nieaktywnej pamięci jest poprawna:

Ta informacja znajduje się w pamięci RAM, ale nie jest aktywnie wykorzystywana, została niedawno wykorzystana.

Ale poniższy przykład jest całkowicie mylący i nadmiernie uproszczony (tak jak mój przykład szczerze mówiąc):

Na przykład, jeśli korzystasz z Mail, a następnie go opuszczasz, pamięć RAM, z której korzystał Mail, jest oznaczana jako pamięć nieaktywna. Nieaktywna pamięć jest dostępna do użycia przez inną aplikację, podobnie jak Wolna pamięć. Jeśli jednak otworzysz Maila, zanim jego nieaktywna pamięć zostanie użyta przez inną aplikację, Mail otworzy się szybciej, ponieważ jego nieaktywna pamięć jest konwertowana na pamięć aktywną, zamiast ładować ją z wolniejszego napędu.

Szukałem więcej zasobów online i znalazłem ten wątek na liście mailingowej jądra darwina, co jest dość pouczające. Cytując Jima Magee (z zespołu Darwina - tak myślę):

Krótko mówiąc, system VM jądra, gdy ma do czynienia z ciśnieniem pamięci, skanuje strony w użyciu i stara się zachować równowagę między aktywnymi i nieaktywnymi znakami. Nieaktywne strony są skanowane w celu ponownego użycia, a jednocześnie oznaczone jako nieaktywne. Jeśli zostały ponownie użyte, są oznaczone jako aktywne, a niektóre inne strony muszą przejść ze stanu aktywnego do nieaktywnego, aby wykryć, czy jest aktywne. Tak więc nieaktywne jest mylące. Jest to skrót od „prawdopodobnie nieaktywny, spróbujmy to zweryfikować”.

Jak odkryłeś, saldo wewnętrzne, do którego dążymy (obecnie), wynosi około 2/3 aktywności vs 1/3 nieaktywności ...

To wyjaśnia zachowanie, które obserwujesz. Oznacza to, że nieaktywne strony, które widzisz, należą do uruchomionych programów, które nie były ostatnio używane. Kiedy uruchamiasz nowy program, nieaktywne strony są zamieniane. Jednocześnie strony z innych programów są oznaczone jako nieaktywne, aby utrzymać stosunek 2/1 między aktywnym a nieaktywnym.

Nitka zawiera także pewne sugestie, aby dowiedzieć się więcej na temat wewnętrznych Darwin. Istnieją również pewne sugestie na wypadek, gdybyś zaczął badać wykorzystanie pamięci z powodu problemów z piłką plażową (które zwykle mają z tym niewiele wspólnego).

Wniosek pozostaje ten sam: zaufaj swojemu jądru i nie próbuj go przechytrzyć. :-)

m000
źródło
1
Cześć, Nie jestem pewien, czy mnie rozumiesz - mówię w tej chwili, gdy masz 100-200 MB wolnej pamięci, 2,6 GB „nieaktywny” i uruchamiam inny program, powiedzmy zaćmienie, xcode itp. Co się dzieje, to nie korzysta z nich 2,6 GB i zamiast tego zamień z aktywnej pamięci. Nie jestem pewien, czy rozumiesz, o co mi chodzi. W każdym razie dziękuję za odpowiedź
Balchev
Teraz jest jasne. Może powinieneś dodać przykład w tym komentarzu do swojego pytania. Dodałem dodatkowe informacje, które moim zdaniem stanowią odpowiednie wyjaśnienie tego, co obserwujesz.
m000
Nie jestem pewien, czy mam edytować moją pierwotną odpowiedź. Wyjaśnia inną sprawę (ponieważ nie dostałem twojego pytania tuż przed twoim komentarzem) i może mylić ludzi.
m000
Tak jak Radoo mówi w swoim komentarzu - „OS X jest głodną bestią”. Nie spodziewałem się, że OS X będzie tak głodny pamięci (zarówno Lion, jak i Mountain Lion) i dlatego pomyślałem, że jest tu coś podejrzanego. Dziękuję za zaktualizowaną odpowiedź.
Balchev,
6

Możesz bezpiecznie wyłączyć stronicowanie, jeśli masz wystarczającą ilość pamięci RAM.

Wypróbuj te polecenia.

sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist
sudo rm /private/var/vm/swapfile*

Następnie uruchom ponownie i sprawdź, czy proces dynamic_pager nie jest już uruchomiony.

Upewnij się, że nie utworzono żadnych plików wymiany /private/var/vm/.

Aby ponownie włączyć, spróbuj wykonać następujące polecenia:

sudo launchctl load -wF /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist

Możesz także wyłączyć Spotlight, aby zwolnić więcej pamięci RAM i zmniejszyć aktywność dysku. Poniższe polecenia służą do wyłączania i włączania Spotlight.

sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.metadata.mds.plist
sudo launchctl load -wF /System/Library/LaunchDaemons/com.apple.metadata.mds.plist
arundevma
źródło
Czytałem przez sieć, że wyłączenie wymiany w OSX może prowadzić do nieoczekiwanego zachowania systemu i awarii. Czy to prawda?
Balchev
Kiedy będzie mało pamięci, będzie. Ale jeśli masz wystarczającą ilość pamięci, na przykład 8 Gb, nie spowoduje to żadnego problemu.
arundevma
2
„Wystarczająca pamięć, jak 8 Gb” - przepraszam, to takie słodkie… :)
Bombe
0

Niewiele możesz zrobić. Dlaczego to robi? Ponieważ tak właśnie działa OS X. Ciekawe jest to, jak zajęta pamięć powiększa się z każdym snem na komputerze Mac.

Co możesz zrobić:

  1. Zaktualizuj pamięć RAM.
  2. Uruchom Święty „ oczyszczającego polecenia”, aby usunąć większość pamięci nieaktywnej, gdy jest to konieczne.
  3. Wyłącz wymianę http://osxdaily.com/2010/10/08/mac-virtual-memory-swap/

źródło
Cześć, użyłem polecenia czyszczenia, ale przez większość czasu zwalnia mniej niż połowę „nieaktywnej” pamięci. Czytałem, że wyłączenie wymiany w OSX może prowadzić do nieoczekiwanego zachowania systemu i awarii. Więc poszedłem z 1) Teraz jest w porządku z 16 GB :) Tylko tyle pamięci używa na serwery, a nie na komputery :) Dzięki za twoja odpowiedź
Balchev
Mam 16 GB na moim MacBooku Pro, to nie jest serwer. :) To dobrze znany OS X to głodna bestia, jeśli chodzi o pamięć, szczególnie gdy używanych jest wiele średnich i dużych aplikacji jednocześnie. Udało mi się wypełnić wszystkie te 16 GB bez otwierania żadnego oprogramowania do edycji obrazów / wideo, tylko niektórych gier i małych aplikacji. Nieaktywna pamięć wynosiła około 4 GB ...
Musisz także wziąć pod uwagę, że wiele aplikacji OS X jest już 64-bitowych. Aplikacje 64-bitowe przydzielają więcej pamięci niż aplikacje 32-bitowe, ponieważ przestrzeń adresowa staje się coraz większa.
0

System działa zgodnie z przeznaczeniem. Nawet gdy nie ma presji pamięci, warto napisać strony, których nie można odrzucić, ale nie zostały ostatnio użyte do wymiany, gdy system nie jest zajęty. W ten sposób, jeśli później pojawi się presja pamięci, strony te można eksmitować z pamięci RAM bez konieczności zapisywania ich w celu zamiany, gdy system jest zajęty.

David Schwartz
źródło
1
to jest źle zaprojektowane. jest zbyt agresywny w przydzielaniu i wykorzystywaniu przestrzeni wymiany.
mendota
Dlaczego to ma znaczenie? Jeśli jest dużo darmowych zamian, przydzielanie przestrzeni wymiany jest nieszkodliwe. Jest to szczególnie prawdziwe, gdy wymiana nie zawiera potrzebnych danych, ponieważ usunięcie przydziałów nie wiąże się z żadnymi kosztami. To dobry projekt - wykonujący ciężką pracę, gdy jest prawie nieopłacalny, zamiast odkładać go na później, gdy system jest pod presją.
David Schwartz
2
jest źle zaprojektowany, gdy jest zbyt agresywny i powoduje jąkanie lub zawieszanie się w programach, przez pomyłkę oznacza jako nieaktywny i zaczyna się zamieniać. tymczasem w pamięci RAM jest jeszcze osiem innych koncertów: /
mendota,
Zgadzam się z Mendota. Po całkowitym wyłączeniu zamiany mój system działa płynnie, bez żadnych zacięć.
Anton Kuzmin
@AntonKuzmin To naprawdę nie ma nic wspólnego z tym, o co chodzi w tym pytaniu. Jeśli przeczytasz to pytanie, w ogóle nie mówi nic o jąkaniu lub jakichkolwiek problemach.
David Schwartz