Powszechnym zjawiskiem w moim codziennym użytkowaniu (i kilku innych, według różnych postów w Internecie) OS X, system wydaje się zwalniać, gdy nie ma już dostępnej „wolnej” pamięci. Podobno wynika to z zamiany, ponieważ widoczna jest duża aktywność dysku i vm_stat zgłasza wiele stron. (Popraw mnie źle)
Jednak ilość „nieaktywnego” pamięci RAM wynosi zazwyczaj około 12,5% -25% całej dostępnej pamięci (^ 1.), Kiedy zamiana rozpoczyna się / występuje / kończy.
Według http://support.apple.com/kb/ht1342 :
Nieaktywna pamięć
Ta informacja w pamięci nie jest aktywnie wykorzystywana, ale została ostatnio wykorzystana.
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. Ta 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ć pocztę z wolniejszego dysku twardego.
I zgodnie z http://developer.apple.com/library/mac/#documentation/Performance/Conceptual/ManagingMemory/Articles/AboutMemory.html :
Nieaktywna lista zawiera strony, które obecnie znajdują się w pamięci fizycznej, ale nie były ostatnio dostępne. Strony te zawierają prawidłowe dane, ale mogą zostać w dowolnym momencie zwolnione z pamięci .
Tak więc w zasadzie: kiedy program zakończy pracę, jego pamięć zostaje oznaczona jako Nieaktywna i powinna być dostępna w dowolnym momencie. Mimo to OS X będzie wolał zacząć zamieniać pamięć na plik wymiany zamiast po prostu zajmować tę pamięć, ilekroć ilość wolnej pamięci spadnie.
Dlaczego? Jaka jest przewaga tego zachowania nad, powiedzmy, natychmiastowym zwalnianiem nieaktywnej pamięci i nawet nie dotykaniem pliku wymiany? Niektóre źródła (^ 2.) Wskazują, że OS X wyświetla stronę „Nieaktywną” w celu zamiany pamięci przed jej zwolnieniem, ale nie ma to teraz sensu, czy pamięć może zostać w dowolnym momencie zwolniona z pamięci ? Zamiana jest droga, wydanie jest tanie, prawda?
Czy to zachowanie można zmienić za pomocą preferencji lub znanego hakowania? (Najlepiej taki, który nie obejmuje całkowitego wyłączenia swap / dynamic_pager i ponownego uruchomienia ...)
Doceniam polecenie czyszczenia , a także koncepcję Naprawianie uprawnień do dysku w celu wymuszenia wolnej pamięci, ale są to sposoby na boleśnie wymuszenie większej ilości Wolnej pamięci niż faktyczne naprawienie logiki decyzji zamiany / wydania ...
Btw podobne pytanie zostało zadane tutaj: http://forums.macnn.com/90/mac-os-x/434650/why-does-os-x-swap-when/ i tutaj: http: //hintsforums.macworld .com / showthread.php? t = 87688, ale mimo że operatorzy ponownie zadali podstawowe pytanie, żadna z odpowiedzi nie zawiera odpowiedzi na to pytanie ...
^ 1. AKTUALIZACJA 17-mar-2012 Od kiedy po raz pierwszy opublikowałem to pytanie, przeszedłem z 4 GB do 8 GB zainstalowanego pamięci RAM, a problem pozostaje. Ilość „nieaktywnego” pamięci RAM wynosiła wcześniej 0,5 gb-1,0 gb i obecnie wynosi zwykle około 1,0-2,0 GB, kiedy zamiana zaczyna się / występuje / kończy, tzn. Wydaje się, że około 12,5% -25% pamięci RAM jest zachowane jako nieaktywne przez osx logika jądra.
^ 2. Na przykład https://apple.stackexchange.com/questions/4288/what-does-it-mean-if-i-have-lots-of-inactive-memory-at-the-end-of-a-work- dzień :
Po wykorzystaniu całej pamięci (wolna pamięć wynosi 0), system operacyjny wypisze nieaktywną pamięć do pliku wymiany, aby zrobić więcej miejsca w aktywnej pamięci.
AKTUALIZACJA 17 marca 2012 r
Oto podsumowanie metod, które do tej pory zostały zasugerowane:
Czystka komenda
„Służy do przybliżania początkowych warunków rozruchu przy użyciu bufora bufora zimnego dysku do analizy wydajności. Nie wpływa na anonimową pamięć przydzieloną przez malloc, vm_allocate itp.”.
Jest to przydatne, aby zapobiec wymianie pamięci podręcznej dysku przez osx (co jest absurdalne, że osx faktycznie tak robi), ale z wadą zwolnienia pamięci podręcznej dysku, co oznacza, że jeśli pamięć podręczna dysku nie miała być po wymianie, po prostu skończyłoby się to buforowaniem zimnego bufora dysku, prawdopodobnie wpływając negatywnie na wydajność.
Aplikacja FreeMemory i / lub Naprawianie uprawnień do dysku w celu wymuszenia wolnej pamięci
Nie pomaga zwolnić pamięci, tylko przenosi niektóre gigabajty zawartości pamięci z pamięci RAM na dysk HD. W końcu powoduje to wiele zamian, gdy próbuję korzystać z aplikacji, które były otwarte podczas zwalniania pamięci, ponieważ wiele jego vm jest teraz w trakcie wymiany.
Przyspieszenie alokacji swapów za pomocą dynamicpagerwrapper
Wydaje się, że dobrym pomysłem jest przyspieszenie użycia wymiany, ale nie rozwiązuje problemu zamiany osx w pierwszej kolejności, gdy pamięć jest nadal nieaktywna.
Wyłączanie zamiany poprzez wyłączenie dynamicpager i ponowne uruchomienie
Zmusi to osx do niestosowania wymiany na cenę zawieszenia systemu, gdy używana jest cała pamięć. Nie jest realną alternatywą ...
Wyłączanie wymiany za pomocą zhakowanego dynamicznego pagera
Podobnie do powyższego wyłączenia dynamicznego pagera, niektóre fragmenty komentarzy do postu na blogu wskazują, że nie jest to realne rozwiązanie: „Pamięć nieaktywna jest jak zwykle wysoka”. „gdy w systemie kończy się pamięć, cały system operacyjny zawiesza się ...”, „jeśli zużyjesz całą ilość pamięci komputera Mac, komputer prawdopodobnie się zawiesi”
Podsumowując, wciąż nie jestem świadomy sposobu, aby wyłączyć system Mac OS X z zamiany, gdy wciąż jest „nieaktywna” pamięć. Jeśli nie jest to możliwe, może przynajmniej istnieje jakieś wytłumaczenie, dlaczego osx woli wymieniać pamięć, która może zostać zwolniona z pamięci w dowolnym momencie ?