Problem ze zrozumieniem nieaktywnej pamięci w systemie MacOSX

8

Myślałem, że rozumiem, jak MacOSX zarządza pamięcią, ale ostatnio zaskoczyło mnie jego działanie. Oto sytuacja:

  1. Mam zupełnie nowy system Core i7 z 8 GB pamięci fizycznej z systemem MacOSX 10.6.7. Istnieje kilka aplikacji, które regularnie zajmują część pamięci - Safari, Mail, Xcode, Terminal itp.
  2. Muszę równolegle uruchamiać trzy 64-bitowe procesy, z których każdy zużywa około 2000 mln pamięci rzeczywistej.
  3. Chociaż pamięć przewodowa pozostaje poniżej 1000 mln (tj. Mam ponad 7000 mln dostępnych dla procesów), widzę dużą aktywność stronicowania prowadzącą do bardzo złej wydajności z trzech procesów intensywnie korzystających z pamięci, które uruchomiłem.
  4. Najwyraźniej nie brakuje mi dostępnej pamięci RAM, ponieważ zgłoszona nieaktywna pamięć pozostaje na poziomie około 2500 mln, a pamięć aktywna nie wzrasta powyżej 5000 mln.

Czy ktoś może dać mi wskazówkę, dlaczego MacOSX nie zwalnia nieaktywnej pamięci dla procesów, które jej potrzebują, zamiast tego uciekając się do stronicowania? Czy istnieje też jakiś właściwy sposób, aby wpłynąć na zarządzanie pamięcią przez system?

Ventzi Zhechev
źródło

Odpowiedzi:

5

Zauważyłem na moim komputerze, że Mac OS X jest trochę powolny, aby znaleźć właściwe rzeczy.

Ilekroć robię coś szczególnie wymagającego pamięci, często wychodzę z kilku aplikacji, aby sobie z tym poradzić. Safari to ogromna pamięć, jeśli działała przez jakiś czas i znajduje się na szczycie listy aplikacji, które należy zamknąć. W moim przypadku było to, gdy próbowałem uruchomić VMWare Fusion bez dość wystarczającej ilości pamięci RAM.

Prawdopodobnie wiesz o tym, ale oto kilka linków do dokumentacji Apple, która opisuje użycie pamięci i pamięci wirtualnej w OS X:

http://support.apple.com/kb/ht1342

http://developer.apple.com/library/mac/#documentation/Performance/Conceptual/ManagingMemory/Articles/AboutMemory.html

Oto podane wyjaśnienie: Nieaktywna lista zawiera strony, które obecnie znajdują się w pamięci fizycznej, ale nie były ostatnio dostępne. Trudno jest uzyskać dokładną definicję tego, co to oznacza, ale wydaje się, że zawiera pamięć podręczną systemu plików, a także faktyczną nieaktywną pamięć.

Nieaktywna pamięć jest prawdopodobnie trudna do opanowania w interaktywnym systemie operacyjnym z graficznym interfejsem użytkownika, w którym użytkownik może w dowolnym momencie przełączyć się na dowolną działającą aplikację, a zapewnienie reakcji w takiej sytuacji jest ważne ... ale drugą stroną tego jest to, że w sytuacji takiej jak Twoja system operacyjny nie do końca wie, co należy zrobić.

Możliwe jest wyczyszczenie (częściowo) nieaktywnej pamięci za pomocą polecenia purge . Może to wymagać instalacji przez zainstalowanie narzędzi CHUD, ale być może już to masz. Nie próbowałem użyć polecenia czyszczenia, więc YMMV ...

Rozgryzłem się trochę i mogłem odpowiedzieć na twoje pytanie. Po napisaniu tego wszystkiego znalazłem inne pytanie na tej stronie, które zawiera wiele takich samych informacji, które mogą również pomóc.

Mike Meyers
źródło
Dzięki! purgePolecenie jest dokładnie to, czego szukałem. Artykuły pomocy technicznej znalazłem w KB firmy Apple, ale nie były szczególnie przydatne.
Ventzi Zhechev
1

MacOS robi zwolnić pamięć nieaktywne, ale tylko wtedy, gdy naprawdę musi. Ta „nieaktywna pamięć” może być pamięcią, którą jądro uważa za kandydata na stronicowanie - ale jeszcze się nie zdecydowało, czekając na więcej czasu bez odniesienia do nieaktywnej pamięci (zamiast tego koncentruje się na stronicowaniu pamięci które naprawdę wkrótce nie będzie ponownie używane). W takim przypadku „wyczyszczenie” nieaktywnej pamięci spowoduje pogorszenie wydajności (ponieważ te często używane strony musiałyby zostać ponownie odczytane z dysku, zanim program będzie mógł kontynuować wykonywanie).

purgePrzydaje się programistom do symulacji warunków uruchamiania aplikacji - np. aby sprawdzić, ile czasu zajmuje uruchomienie aplikacji po pierwszym uruchomieniu po długim rozruchu. Dla typowego użytkownika purgenie jest to bardzo przydatne (i faktycznie spowoduje tymczasowe pogorszenie wydajności).

jhfrontz
źródło