Давление памяти не является простым показателем процентной доли свободной памяти и, похоже, представляет собой график от 0 до 100%. sysctl
Значение vm.memory_pressure
рассчитываются по отношению к вычисленному мишени , что отслеживает соотношение между свободной и неактивными страницами памяти к проводным и активным страницам. Абсолютные счетчики просматриваются с помощью vm_stat
инструмента командной строки для проверки подробного распределения виртуальной памяти. Джонатан Левин имеет отличную документацию по адресу http://newosxbook.com/articles/MemoryPressure.html, в которой рассказывается о виртуальной памяти macOS и iOS, а также о том, как они рассчитывают нагрузку на память, а также действия, предпринимаемые при высоком индексе давления.
Соответствующая виртуальная память (vm), которая обеспечивает вычисление vm.memory_pressure
:
vm.page_free_count
- абсолютное количество свободных страниц
vm.vm_page_free_target
- рассчитанная цель или цель для ситуации без давления
vm.page_free_wanted
- что система vm хотела бы освободить, чтобы облегчить текущий расчетный индекс давления
Итак, если вы отслеживаете нехватку памяти с помощью монитора активности (или я проверял значения sysctl программно или в оболочке командной строки), вы бы хорошо взглянули на эти четыре значения:
sysctl -a vm | egrep "page_free|pressure"
В memory_pressure
Mavericks введена новая команда, и когда я запускаю ее, чтобы перевести подсистему памяти в состояние предупреждения, вы можете увидеть, как давление в памяти увеличивается до желтого диапазона.
Инструмент выделен около 4 ГБ памяти на инструмент как график давления неуклонно возрастает до такого состояния , где , по- видимому графический «Предупреждение» , уровень: sudo memory_pressure -l warn
. Как видите, в системе до давления использовалось 5,9 ГБ, а после использовалось до 7,99 ГБ, которое даже не нужно складывать из-за подкачки и сжатия.
После просмотра того, vm_stat 15
как результат предупреждения показывал отсутствие измеримой подкачки, я вышел из инструмента (Control-C) и затем снова запустил инструмент, чтобы сделать критичным давление на память:sudo memory_pressure -l critical
Я не позволял этому запускаться дольше нескольких минут, так как пейджинг начинался, и как только инструмент сказал, что у меня есть 5 ГБ ОЗУ, перенесенной на диск, я не хотел заполнять свой диск и выходить из инструмента.
Вы можете наблюдать, как быстро система освобождала ОЗУ после того, как предупреждение было снято, а также как оно переходило на «красную» территорию, чтобы показать, что система виртуальной памяти не может сжать достаточно страниц, чтобы избежать подкачки на диск. Мое обоснованное предположение - красный, поскольку давление указывает на обмен и резкое перераспределение и / или время, когда количество свободных страниц ниже того, которое предпочитает система, и активно очищает неактивные страницы и / или меняются страницы, которые, как ожидается, будут использоваться для обмена. Аналогичным образом, система быстро восстанавливается после того, как выделения освобождаются и давление снимается с системы виртуальной памяти.
xnu
открытом исходном коде внутренности. Я вытащил 4 значения, которые наиболее актуальны для отображения давления в графическом интерфейсе.Чтобы немного прояснить и сделать это предположение более точным: давление памяти - это показатель, используемый ядром (xnu) с выделенным потоком, называемым memory_status (ранее известный как Jetsam). Этот поток отвечает за обнаружение, когда доступной оперативной памяти не хватает - что в OS X может вызвать подкачку, а в iOS убивает приложение с самым высоким потреблением памяти (так как нет подкачки). В Mavericks две ОС ближе друг к другу. Memorystatus выдает примечание ядра, которое среда выполнения Obj-C в конечном итоге переводит в appDidReceiveLowMemoryWarning. Приложения должны очищать неиспользуемую или постороннюю память (например, кэши). LibC Дарвина также очищает память автоматически.
Существует специальный (хотя и недокументированный) системный вызов vm_pressure_monitor (# 296, если я правильно помню), который позволяет клиенту прослушивать события давления и видеть, сколько физических страниц можно восстановить.
Вы можете просматривать события давления на Mavericks с помощью Process Explorer для OS X - его можно загрузить с http://newosxbook.com/index.php?page=downloads . Это показывает вам «манометр», а также события давления.
источник
Давление памяти определяется двумя счетчиками, которые Мах хранит внутри:
vm_page_free_count
: Сколько страниц оперативной памяти сейчас свободноvm_page_free_target
Сколько страниц оперативной памяти, как минимум, должно быть оптимально свободноВы можете легко увидеть это с помощью sysctl:
если количество свободных страниц падает ниже целевого количества - у нас ситуация давления.
С http://newosxbook.com/articles/MemoryPressure.html
источник