Czy istnieje sposób, aby OSX używał więcej pamięci RAM i mniej swapów?

12

Problem, który mam, dotyczy serwera (i innych urządzeń OSX), mamy 4 GB pamięci RAM, ale odkrywamy, że OSX zużywa tylko 40–60% dostępnej pamięci RAM, a jednocześnie ma wymianę 6-7 GB. Na serwerze działają Apache i MySQL, podczas gdy pozostałe komputery to komputery stacjonarne.

Porównałem jego użycie z podobnymi urządzeniami Linux (sprzęt i oprogramowanie) i stwierdziłem, że Linux zwykle używa 80-90% pamięci RAM i ma znacznie mniejszy plik wymiany (2-3 GB). Serwery Linux również zwykle działają znacznie szybciej.

Czy istnieje sposób, aby zmusić OSX do użycia większej lub większości pamięci RAM przed użyciem pliku wymiany dysku?

W systemie Windows można całkowicie wyłączyć wymianę. Czy jest coś podobnego dla OSX?

Darryl Hein
źródło
Dla wyjaśnienia: 1. Czy wąskim gardłem jest system VM? Podobnie jak wtedy, gdy widzisz gwiazdy pamięci, jest duża ich liczba, jeśli wystąpią strony. 2. Gdzie otrzymujesz informacje o wielkości darmowej i maszynie wirtualnej? Na przykład rozmiar maszyny Wirtualnej podany w Monitorze aktywności nie jest taki sam jak rozmiar pliku wymiany.
Chealion
Nie mam dowodu na to, że problemem jest system VM (VM lub swap), ale wiem, że na pulpicie mam 6 GB pamięci RAM, z czego zwykle 2-3 GB jest zwykle bezpłatne. Kiedy przełączam programy, pomyślałbyś, że to płonie szybko, ponieważ wszystko jest w pamięci RAM, ale zamiast tego potrzeba 2-15 sekund, aby wrócić do czegoś takiego jak Illustrator. Myślę, że podobne rzeczy dzieją się na serwerze - coś w rodzaju buforowania MySQL lub tabel tymczasowych. Używam góry, aby określić użycie VM, RAM i swap. Jakieś pomysły?
Darryl Hein
3
Aby ustalić rzeczywiste użycie VM, najłatwiej jest uruchomić du -sh /var/vm- powiedział, że może być sztucznie wysoki, jeśli występuje obraz snu (najczęściej widziany na laptopach). Dostępnych jest kilka narzędzi, które mogą pomóc określić, czy to pamięć powoduje spowolnienie: vm_stat- szczególnie interesuje Cię wartość stronicowania - jeśli wzrośnie nieco, to wiesz, że mocno zamieniasz. Aby uzyskać więcej informacji na temat zarządzania pamięcią przez Apple: developer.apple.com/documentation/Performance/Conceptual/...
Chealion

Odpowiedzi:

17

Najbardziej podstawowa odpowiedź? Nie. System operacyjny obsługuje zarządzanie pamięcią dla użytkownika - zapewnia procesowi tyle pamięci, ile wymaga, i wymaga tego, i nie zapewnia wiele, jeśli chodzi o możliwość modyfikowania działania systemu. Nie pomaga wiele w ustaleniu, czy wykorzystanie pamięci jest częścią równania, dlaczego serwery Linux przewyższają serwery Mac.

Ze względu na brak „możliwości hakowania” w systemie pamięci wirtualnej najlepszym rozwiązaniem jest ocena wydajności pamięci wirtualnej, aby sprawdzić, czy to naprawdę powód, dla którego występują problemy z wydajnością - najbardziej podstawowe jest użycie vm_statlub użycie śledzenia na żywo za pomocą, vm_stat [number of seconds]aby zobaczyć, ile stron ma miejsce. Przeniesienie nieużywanych stron z pamięci RAM na dysk twardy ma znacznie niższy koszt niż odzyskanie stron z dysku twardego do pamięci RAM. Strona w terminologii OS X odnosi się do 4kb danych.

Ponadto procesy 32-bitowe (np. Illustrator) nie mogą uzyskać dostępu do więcej niż 4 GB, więc teoretycznie możliwe jest posiadanie 2 GB wolnego miejsca i procesowi zabraknie pamięci, jeśli zainstalowano 6 GB.

Zarówno na twoim pulpicie, jak i na serwerach, uruchomiłbym vm_stat 2i sprawdził ostatnią kolumnę - szczególnie, gdy doświadczasz wielosekundowego opóźnienia podczas przełączania na program Illustrator.

Aby dowiedzieć się, jak duża jest zamiana, możesz sprawdzić rozmiar zamiany w monitorze aktywności lub uruchomić du -shc /var/vm/swap* | tail -n 1.

Korzystanie du -sh /var/vmma jedno zastrzeżenie: na laptopach, które mają tryb hibernacji (cokolwiek z ostatnich 4 lat lub nowszych), może być sleepimagemniej więcej rozmiar zainstalowanej pamięci.


Żargon pamięci Mac OS X:

Przewodowy : Odnosi się do kodu jądra i tym podobnych. Pamięć, której nigdy nie należy przenosić z pamięci RAM. Znany również jako pamięć rezydentna.

Shared : Pamięć współdzielona przez dwa lub więcej procesów. Oba procesy pokazałyby taką ilość pamięci, więc może być nieco mylące, ile pamięci faktycznie jest w użyciu.

Rzeczywiste : jest to „rzeczywiste” użycie pamięci przez aplikację, zgłaszane przez task_info () - przybliżona liczba fizycznych stron, które ma bieżący proces. (RSIZE)

Prywatne : jest to pamięć, z której proces korzysta wyłącznie samodzielnie, w pamięci rezydentnej. (RPRVT)

Wirtualny : Całkowita ilość przestrzeni adresowej w procesie, która jest odwzorowana na cokolwiek - niezależnie od tego, czy jest to dowolnie duża przestrzeń na zmienne, czy cokolwiek innego - nie jest równa faktycznemu użyciu maszyny wirtualnej. (VSIZE)

Aktywna : pamięć jest obecnie oznaczona jako aktywna i używana jest pamięć RAM.

Nieaktywna : „Nieaktywna pamięć nie jest już używana i została zbuforowana na dysk. Pozostanie w pamięci RAM, dopóki inna aplikacja nie zajmie miejsca. Pozostawienie tych informacji w pamięci RAM jest korzystne, jeśli wrócisz (lub klient komputera) do tego później ”. - Pomoc Mac OS X.

Bezpłatnie : ilość pamięci RAM faktycznie dostępnej bez żadnych danych.


Najlepszą dokumentacją, jaką znam (i którą mogłem znaleźć w dalszych badaniach), jest własny artykuł Apple dotyczący zarządzania pamięcią na ich stronie internetowej dla programistów.

Inne wartościowe źródła: lista dyskusyjna Darwin-dev: [ 1 ], [ 2 ] oraz stary artykuł na temat MacOSXHints . Dodatkowo Mike Ash opublikował dobre wprowadzenie dla laika na swoim blogu


Może być możliwe (nie wypróbowałem tego) wyłączenie systemu pamięci wirtualnej poprzez uruchomienie, sudo launchctl unload /System/Library/LaunchDaemons/com.apple.dynamic_pager.plista następnie ponowne uruchomienie, aby dynamiczny pager (program, który faktycznie dokonuje alokacji pamięci wirtualnej) nie uruchomił się. Ponieważ jednak system operacyjny zakłada, że ​​ma pamięć wirtualną, możesz bardzo szybko napotkać problemy. Aby załadować kopię zapasową, uruchom sudo launchctl load /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist(w razie potrzeby z trybu pojedynczego użytkownika)

Chealion
źródło