Czy pamięć nieaktywna nie jest marnowaniem zasobów?

87

Szukam wyjaśnienia wykorzystania pamięci na moim komputerze, szczególnie w świetle przykładu na poniższym zrzucie ekranu:

Zużycie pamięci

Rozumiem, co jest Freei co Activeznaczy
Ale jakie są znaczenia Wiredi Inactive?

Zwłaszcza inactivedlaczego wykorzystuje tak dużo pamięci na coś, czego nie używamy?

GusDeCooL
źródło

Odpowiedzi:

142

Nieaktywna pamięć otrzymała okropny rap z powodu gównianego imienia. Powinno to się nazywać coś w rodzaju „spraw, by Twój Mac był naprawdę szybki za drugim, trzecim i czwartym razem, gdy wykonuje to samo zadanie”, z wyjątkiem tej okropnej nazwy.

Firma Apple ponownie napisała monitor aktywności, gdy wprowadziła kilka nowych funkcji i dodała pamięć skompresowaną, więc niektóre z nich nie dotyczą już systemu macOS, który nie wyświetla „Nieaktywnej pamięci”, ale nadal dotyczy zarządzania pamięcią Mac OS X, jak zostało to udokumentowane wersja Monitora aktywności: https://support.apple.com/en-us/HT201538

Oto jak wytłumaczyłem coś komuś nowemu w koncepcji pamięci wirtualnej w OS X:

  • Przewodowy : system nie może działać bez takiej ilości pamięci RAM (nigdy nie zamienianej)
  • Aktywne: programy naprawdę używają tej pamięci teraz lub w ciągu ostatnich kilku sekund
  • Nieaktywne: rzeczy, które programy odczytały z wolnego dysku lub z innego miejsca i powiedziały, że nigdy więcej nie będą potrzebne. Inżynierowie wiedzą lepiej, wrócisz do Facebooka za kilka minut lub uruchom ponownie program Word po jego zamknięciu. Te same rzeczy zdarzają się wielokrotnie na komputerach.
  • Bezpłatnie: całkowicie zmarnowana pamięć RAM - system potrzebuje tylko jednego lub dwóch MB wolnego miejsca, aby pokryć wnioski o przydział krótkoterminowy. W przypadku największych przydziałów po prostu wykorzystuje część Nieaktywnej pamięci RAM, przydzielając ją do aktywnej / przewodowej i usuwając informacje o tym, co trzymała.

Problem pojawia się, gdy Free + Inactive jest mniej niż w przybliżeniu 1/3 całości, a wtedy rzeczy mogą naprawdę zwolnić.

Nieaktywna pamięć to dodatkowa prędkość / podwójna pamięć RAM. W jednej chwili jest za darmo, ale także sprawia, że ​​powtarzane zadania są znacznie, dużo szybsze, jeśli system poprawnie zgadł i zachował coś w pamięci RAM, co zrobisz ponownie. Jest szybszy niż zamieniona pamięć, ponieważ jest już załadowany do pamięci RAM i przyspiesza, gdy system pamięci wirtualnej zgaduje.

Gdy zastanawiasz się, czy nie jest problem z pamięcią RAM, zamiast patrzeć na każdą z 4 kategorii (5 jeśli liczyć aktywną zamianę), możesz połączyć W + A jako spowolnienie nowego programu / zadania i F + I jako przyspieszenie nowy program / zadanie. Im więcej masz F + I, tym więcej nowych programów możesz uruchomić, zanim pamięć RAM będzie musiała polegać na zamianie, aby żonglować przydzieloną pamięcią.

Naprawdę nie musisz wiedzieć, jak działa swap, ponieważ wspomniałem o tym powyżej. Zasadniczo, gdy program jest bezczynny i nie był używany przez kilka dni (lub godzin), system zapisze tę pamięć RAM na dysku twardym, zamiast go zabić. To pozwala systemowi tasować i obsługiwać różne rzeczy związane z zarządzaniem pamięcią i powstrzymuje każdy program przed rozmową między sobą w celu ustalenia, kto zużyje mniej pamięci, gdy system się skończy.

Oto rzeczywisty przykład użycia nieaktywnej pamięci RAM.

  1. Zamknij wszystkie aplikacje i upewnij się, że dwie testowane przez nas aplikacje nie są ustawione na automatyczne uruchamianie po zalogowaniu
  2. Uruchom ponownie komputer Mac
  3. Uruchom monitor aktywności i obserwuj pamięć RAM przez cały czas
  4. Czas potrzebny do uruchomienia aplikacji A (MS Word byłby dobrym wyborem)
  5. Zamknij A
  6. Czas, jak długo zajmuje uruchomienie aplikacji B (Adobe coś by też było dobre)
  7. Wyjdź B
  8. Czas, jaki zajmuje drugie uruchomienie A
  9. Zamknij A
  10. Drugie uruchomienie czasu B.
  11. Czas A zaczyna się trzeci raz z uruchomionym B.

Powinieneś zobaczyć dramatyczne przyspieszenie drugiego / trzeciego uruchomienia, gdy system uczy się utrzymywać w nieaktywnej pamięci RAM rzeczy, które muszą uruchomić te dwie aplikacje.


W twoim przypadku - całkowita liczba połączeń przewodowych i aktywnych oznacza, że ​​prawdopodobnie nastąpi zamiana na dysk, a komputer Mac nie jest tak szybki, jak to możliwe, ponieważ nieaktywna pamięć RAM nie jest wystarczająco duża, aby pomieścić wszystkie rzeczy, które mogą być potrzebne do ponownego użycia . Jeśli masz szybki dysk SSD, ten przydział pamięci RAM jest OK i zamiast zaczynać zwalniać, gdy mniej niż 1/2 pamięci RAM to F + I, możesz wyciąć rzeczy bliżej do około 1/4 całkowitej pamięci RAM dla F + I zanim zobaczyłem zauważalną powolność. Te wytyczne są ogólne i będziesz musiał oglądać vm_stat 15lub podobny okres, aby upewnić się, że ciągłe i średnie zamiany głośności nie powodują spowolnienia komputera Mac.

bmike
źródło
9
Wow, bardzo kompletna odpowiedź dla przybysza takiego jak ja. Dziękuję bardzo, bardzo mile widziane :)
GusDeCooL
6
Tak - muszę odpowiadać dla wszystkich - raz na zawsze ludzie mogą go edytować, aby poprawić i uzyskać odpowiedź. Całkiem fajny pomysł na stronę internetową, na której ludzie mogą przychodzić i zadawać ciekawe pytania. :-)
bmike
3
Łał! Piękna odpowiedź!
duci9y
3
Chciałbym, żeby wyjaśnili to w ten sposób w mojej klasie OS.
styfle
2
@ cvsguimaraes purge nie jest natychmiastowy; chat.stackexchange.com/transcript/message/12107920#12107920
Graham Perrin
6

Liczba, która jest najważniejsza przy określaniu, czy komputer Mac jest „obciążony” pamięcią, to liczba „stronicowania”. W Monitorze aktywności w Mavericks nie jest to już pokazywane, teraz pokazują informacje w „Zamień używane:”.

Page out oznacza, że ​​system operacyjny stwierdził, że nie ma wystarczającej ilości dostępnej pamięci RAM, aby uruchomić wszystkie żądane aplikacje i procesy. To, co wtedy robi, to „przechodzenie” do części dysku, które według niego nie są aktywnie wykorzystywane. Oznacza to, że pamięć RAM (szybka) zamienia się na pamięć HDD (wolna). Jeśli dzieje się tak często, ponieważ działa wiele aplikacji, a użytkownik przełącza się między aplikacjami, będzie dużo stron i stron.

Jeśli zauważysz wzrost liczby stron, powinieneś podjąć działania.

FromOZ
źródło
4

Problem na moim komputerze Mac polega na tym, że „nieaktywna” pamięć nigdy nie jest usuwana, chyba że wykonam ręczne czyszczenie w oknie poleceń. Narasta i narasta, dopóki nie pojawi się wyskakujące okienko z informacją, że mam zabić aplikacje. Nawet po zabiciu wszystkich aplikacji wciąż mam zbyt dużo nieaktywnej pamięci, aby cokolwiek uruchomić. Tak więc na moim komputerze Mac z najnowszą wersją Mountain Lion NIE jest prawdą, że nieaktywna pamięć zostanie odzyskana, gdy ilość wolnej pamięci się wyczerpie. Albo mam gdzieś aplikację, która zablokowała część nieaktywnej pamięci, która nigdy się nie uwalnia, albo iOS ma błąd. (Mam 8 GB pamięci fizycznej ... to powinno wystarczyć!)

Ernie
źródło
2
Jestem z tobą, Ernie ... w Mac OS 10.6 i 10.7 na MacBooku Pro i Mac Pro, nieaktywna pamięć zacznie pełzać, a system operacyjny zacznie się zamieniać (zgodnie z „Page Ins” i „Page Outs”) i system zacznie się czołgać. Nieaktywna pamięć wydaje się nigdy nie zostać odzyskana. Muszę użyć funkcji „oczyść”, aby odzyskać nieaktywną pamięć i ponownie uruchomić system.
Eric
2
Skąd pochodzi to okno podręczne? Jaka jest sytuacja w pamięci zgłoszona, vm_statkiedy to się dzieje? Co sprawia, że ​​jesteś tak pewien, że może być „za dużo„ nieaktywnej pamięci ”, aby cokolwiek uruchomić? O ile mi wiadomo, to wszystko, co wiesz, nie ma żadnego kodu w znanym kodzie, faktycznie działa w jądrze.
Kuba Ober
2
Czy przydział pamięci przypomina coś, co przedstawił Gus? Mówimy tutaj o gigabajcie przewodowym i gigabajcie i pół aktywnym. W tej sytuacji racja nieaktywna / wolna wygląda mi dobrze. Być może zadasz drugie pytanie opisujące sytuację, w której wszystko się psuje?
bmike
2

Dzięki wszystkim posterom i komentatorom był to pouczający i przydatny wątek. Moje ostatnie doświadczenia mogą być dla kogoś przydatne. Używam mojego Maca Mini z systemem OS X10.8.1 i 16G RAM całkowicie do tworzenia oprogramowania do prototypowania, które będzie działać w innym miejscu. Zapewniam cię, że nie „wrócę do Facebooka za kilka minut ani nie uruchomię ponownie programu Word po zamknięciu” - zamiast tego robię to na moim Macbooku.

Moim zadaniem było wykasowanie dużej grupy danych, operacje we / wy są czasochłonne, więc chodzi o to, aby odczytać tak dużą porcję danych, aby wcisnąć jak najwięcej za jednym zamachem, przetworzyć ją tam, a następnie zapisać z powrotem na dysk , a następnie powtarzaj proces aż do zakończenia, co zajmuje kilka godzin. Widzę, że za każdym razem, gdy czytam nowy fragment danych, nieaktywna pamięć przeskakuje - przypuszczam, że AI systemu zakłada, że ​​mógłbym chcieć ponownie użyć starego fragmentu, czego nie robię - i za darmo pamięć spada.

Po kilku iteracjach tego procesu ilość wolnej pamięci spada do zaledwie kilku MB, pamięć nieaktywna zwolni jeszcze kilka MB, a następnie, po kilku minutach sprzeczki między wolną i nieaktywną pamięcią, pamięć nieaktywna zostanie zwolniona nawet kilka GB na raz. Wszystko jest jak opisuje @bmike, a zarówno vm_stat 15, jak i Monitor aktywności pokazują 0 stronicowania.

Z wyjątkiem może nie do końca. Kilka razy wszystko płynęło płynnie, idę na kawę lub obiad i nie monitoruję procesu, a to, co nie powinno się zdarzyć, dzieje się, a proces nagle zrzuca mnóstwo stronicowania i zwalnia. Zastanów się, że przyczyną problemu jest prawdopodobnie mój kiepski kod, ale chciałbym wyłączyć nieaktywną pamięć, aby wyeliminować to źródło zmienności. Czy to jest zepsute? W ogóle nie powiedziałbym tego, ale powiedziałbym, że myślę, że zarządzanie pamięcią nie jest zoptymalizowane dla mojego przypadku użycia.

użytkownik100345
źródło
0

Nieaktywna pamięć używana przez ostatnio aktywne i zamykane aplikacje. OS X zachowuje rezerwę na wypadek, gdyby użytkownik chciał ponownie otworzyć program. W takim przypadku OS X nie musi przenosić pamięci, co przyspiesza wydajność. Jeśli nie otworzysz ponownie programu, po chwili pamięć nieaktywnych zostanie zwolniona lub przeniesiona. (C)

Ta funkcja jest fajna, gdy masz dużo pamięci RAM, ale gdy nie jest to dość denerwujące. W rzeczywistości chodzi o jabłka. Gdy masz potężny gadżet lub komputer Mac, wszystko jest fajne, ale gdy urządzenie się zestarzeje, wszystkie funkcje go spowalniają.

Więc musisz użyć specjalnych sztuczek, aby nim zarządzać.

W przypadku nieaktywnej pamięci istnieje polecenie purgejej zwolnienia.

A. Shulev
źródło
-3

Zasadniczo jest zepsuty. Nieaktywna pamięć RAM powinna zostać automatycznie „wyczyszczona”, gdy ilość wolnej pamięci RAM jest niska. Po co trzymać pamięć RAM dla wcześniej otwartych aplikacji, mając nadzieję, że użytkownik ją otworzy ponownie? Niski poziom wolnej pamięci RAM wskazuje, że istniejące aplikacje AKTYWNE mogą nie mieć wystarczającej ilości pamięci RAM i zmienia się TERAZ. Utrzymywanie GB pamięci RAM dla zamkniętych aplikacji jest po prostu głupie. Zgodnie z własnym opisem Apple'a nieaktywna pamięć RAM powinna zostać automatycznie wyczyszczona lub pożyczona, gdy ilość wolnej pamięci RAM jest niska. Oczywiście tak nie jest.

ruletka
źródło
3
Wirtualne systemy pamięci powodują marnowanie dużej ilości wolnej pamięci RAM. Kiedy program prosi o przydział pamięci, jądro tworzy więcej pamięci wirtualnej i rozdaje ją jak cukierki. Tylko wtedy, gdy program zapełni tę pamięć rzeczywistymi danymi, system musi zrobić miejsce w pamięci RAM na tę operację. To „robienie miejsca” wyciąga się z wolnej, a następnie nieaktywnej pamięci, a opóźnienie zwolnienia nieaktywnej pamięci jest niezmiernie małe. Opisane przez Ciebie czyszczenie jest dokładnie tym, co się dzieje - po prostu sugerujesz, że system powinien wykonać tę czynność z góry, gdy system jest leniwy i działa tylko w razie potrzeby.
bmike
@bike Ale czy nie oznacza to, że gdy nie ma wolnej pamięci RAM i uruchamiam nową aplikację, nieaktywna część pamięci RAM spada, a aktywność rośnie? To oczywiście nie jest przypadek i z mojego doświadczenia system staje się bardzo powolny, ilekroć nie ma już wolnego ram, pomimo gigabajtów nieaktywnego ram. System wydaje się preferować zamianę dysku, zanim rozważy ponowne użycie nieaktywnego pamięci RAM.
codingFriend1
4
@ codingFriend1 Bądźmy precyzyjni - ile stron wolnych uznajesz vm_statza „nigdy więcej wolnej pamięci RAM”? Kiedy komputer Mac jest „wolny”, na co liczy się wejście i wyjście strony vm_stat 1? Za każdym razem, gdy oglądam to w systemie problemowym, lubię mieć vm_stat 15działające w oknie terminala (lub logować się do systemu plików), dzięki czemu mogę dokładnie wiedzieć, co to jest aktywność stronicowania przy podejmowaniu decyzji, czy / kiedy dostroję takie rzeczy jak pager. Ten przykład ma 100 MB wolnej pamięci RAM, więc nie jest prawdopodobne nawet pod presją stronicowania.
bmike
-4

Zasadniczo nieaktywna pamięć przyspiesza otwieranie wcześniej zamkniętych procesów. Jeśli stwierdzisz, że Mac OS zajmuje zbyt dużo pamięci, tak naprawdę nie potrzebujesz tak jak z dziesiątek kart otwartych w Safari lub Chrome, po prostu użyj polecenia „wyczyść” w Terminalu. W OS X Mavericks wystarczy użyć „sudo purge” (musisz podać hasło). Goli cenne sekundy, kiedy trzeba coś ponownie otworzyć, ale jeśli chcesz zagrać w grę wymagającą dużej ilości pamięci RAM lub otworzyć aplikację wymagającą dużej ilości pamięci RAM, zdecydowanie sugeruję użycie polecenia czyszczenia.

Kaness K
źródło
2
Czym różni się to od innych odpowiedzi?
user151019,