Ciśnienie pamięci nie jest prostym miernikiem procentowym wolnej pamięci i wydaje się być wykresem od 0 do 100%. sysctl
Wartość vm.memory_pressure
oblicza się w stosunku do obliczonej celu śledzącym stosunek wolnych i nieaktywnych stron pamięci na stronach przewodowych i aktywnych. Liczniki absolutne są przeglądane za pomocą vm_stat
narzędzia wiersza polecenia, aby sprawdzić szczegółowy przydział pamięci wirtualnej. Jonathan Levin ma doskonałą dokumentację na stronie http://newosxbook.com/articles/MemoryPressure.html obejmującą pamięć wirtualną macOS i iOS oraz sposób obliczania presji pamięci, a także działań podejmowanych, gdy indeks ciśnienia jest wysoki.
Odpowiednią pamięcią wirtualną (vm), która zasila obliczenia, vm.memory_pressure
są:
vm.page_free_count
- bezwzględna liczba bezpłatnych stron
vm.vm_page_free_target
- obliczony cel lub cel w sytuacji „bezciśnieniowej”
vm.page_free_wanted
- co system Vm chciałby uwolnić, aby złagodzić bieżący obliczony wskaźnik ciśnienia
Tak więc - jeśli śledzisz swoje ciśnienie pamięci za pomocą Monitora aktywności (lub sprawdzam programowo wartości sysctl lub w powłoce wiersza poleceń), dobrze byłoby spojrzeć na te cztery wartości:
sysctl -a vm | egrep "page_free|pressure"
W memory_pressure
Mavericks wprowadzono nowe polecenie, a kiedy uruchomię je, aby doprowadzić podsystem pamięci do stanu ostrzegawczego - ciśnienie w pamięci wzrośnie do żółtego zakresu.
Narzędzie przeznaczono około 4 GB pamięci do narzędzia jako wykres ciśnienia wzrastała do tego państwa, w którym widocznie poziom „ostrzeżenie” jest wykresie: sudo memory_pressure -l warn
. Jak widać, w systemie przed ciśnieniem wykorzystano 5,9 GB, a po nim użyto do 7,99 GB, co nawet nie wymaga sumowania z powodu zamiany i kompresji.
Po obejrzeniu vm_stat 15
pokazanego wyniku ostrzeżenia w braku mierzalnego stronicowania, zamknąłem narzędzie (Control-C), a następnie ponownie uruchomiłem narzędzie, aby krytyczne ciśnienie pamięci:sudo memory_pressure -l critical
Nie pozwalałem na to przez dłużej niż kilka minut, ponieważ zaczynało się stronicowanie, a gdy narzędzie powiedziało, że mam 5 GB pamięci RAM na stronie, nie chciałem zapełniać dysku i wyłączać narzędzia.
Możesz zaobserwować, jak szybko system zwolnił pamięć RAM po zakończeniu ostrzeżenia, a także jak zmienił się na „czerwone” terytorium, aby pokazać, że system pamięci wirtualnej nie może skompresować wystarczającej liczby stron, aby uniknąć zamiany na dysk. Moje wykształcone przypuszczenie, że presja na czerwono wskazuje na zamianę i dramatyczny nadmierny przydział i / lub czas, w którym liczba wolnych stron jest niższa niż ilość preferowana przez system i aktywnie usuwa nieaktywne strony i / lub strony, które mają zostać użyte do zamiany. Podobnie system szybko się regeneruje po zwolnieniu przydziałów i odciążeniu systemu pamięci wirtualnej.
xnu
otwartym kodzie źródłowym. Wyciągnąłem 4 uwzględnione wartości, które są najbardziej odpowiednie dla wyświetlania ciśnienia w graficznym interfejsie użytkownika.Aby nieco wyjaśnić i sprecyzować to przypuszczenie: presja pamięci jest miarą używaną przez jądro (xnu) z dedykowanym wątkiem o nazwie memory_status (wcześniej znanym jako Jetsam). Wątek ten jest odpowiedzialny za wykrywanie, kiedy dostępna ilość pamięci RAM jest niska - co w OS X może wymusić zamianę, a w iOS zabija aplikację zajmującą najwięcej pamięci (ponieważ nie ma zamiany). W Mavericks oba systemy operacyjne są bliżej siebie. Memorystatus wydaje notatkę jądra, którą środowisko wykonawcze Obj-C ostatecznie przekłada na appDidReceiveLowMemoryWarning. Aplikacje mają wyczyścić nieużywaną lub obcą pamięć (na przykład pamięci podręczne). LibC Darwina automatycznie usuwa pamięć.
Istnieje specyficzne (choć nieudokumentowane) wywołanie systemowe, vm_pressure_monitor (# 296, jeśli dobrze pamiętam), które pozwala klientowi nasłuchiwać zdarzeń ciśnienia i zobaczyć, ile stron fizycznych można odzyskać.
Możesz przeglądać zdarzenia nacisku na Mavericks za pomocą Process Explorera dla OS X - do pobrania ze strony http://newosxbook.com/index.php?page=downloads . To pokazuje zarówno „manometr”, jak i zdarzenia ciśnienia.
źródło
Ciśnienie pamięci jest definiowane przez dwa liczniki, które Mach zachowuje wewnętrznie:
vm_page_free_count
: Ile stron pamięci RAM jest obecnie wolnychvm_page_free_target
: Ile stron pamięci RAM powinno być co najmniej optymalnie wolnych.Możesz je łatwo zobaczyć za pomocą sysctl:
jeśli ilość darmowych stron spadnie poniżej docelowej kwoty - mamy presję.
Od http://newosxbook.com/articles/MemoryPressure.html
źródło