Каких масштабов или мер придерживается «давление памяти» Маверикса и Йосемити?

57

Монитор активности Маверикса (а также Йосемити) показывает новую диаграмму - давление памяти . К сожалению, его справочный текст лишь смутно объясняет, что именно он измеряет. Как рассчитывается давление памяти?

Mavericks Activity Monitor - память

Авторы рисунков переходят к этому ответу в ответе на вопрос о лучшей новой функции Mavericks.

Йенс Эрат
источник

Ответы:

51

Давление памяти не является простым показателем процентной доли свободной памяти и, похоже, представляет собой график от 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_pressureMavericks введена новая команда, и когда я запускаю ее, чтобы перевести подсистему памяти в состояние предупреждения, вы можете увидеть, как давление в памяти увеличивается до желтого диапазона.

результаты мониторинга активности <code> sudo memory_pressure -l warn </ code>

Инструмент выделен около 4 ГБ памяти на инструмент как график давления неуклонно возрастает до такого состояния , где , по- видимому графический «Предупреждение» , уровень: sudo memory_pressure -l warn. Как видите, в системе до давления использовалось 5,9 ГБ, а после использовалось до 7,99 ГБ, которое даже не нужно складывать из-за подкачки и сжатия.

После просмотра того, vm_stat 15как результат предупреждения показывал отсутствие измеримой подкачки, я вышел из инструмента (Control-C) и затем снова запустил инструмент, чтобы сделать критичным давление на память:sudo memory_pressure -l critical

Я не позволял этому запускаться дольше нескольких минут, так как пейджинг начинался, и как только инструмент сказал, что у меня есть 5 ГБ ОЗУ, перенесенной на диск, я не хотел заполнять свой диск и выходить из инструмента.

результаты мониторинга активности <code> sudo memory_pressure -l критического </ code>

Вы можете наблюдать, как быстро система освобождала ОЗУ после того, как предупреждение было снято, а также как оно переходило на «красную» территорию, чтобы показать, что система виртуальной памяти не может сжать достаточно страниц, чтобы избежать подкачки на диск. Мое обоснованное предположение - красный, поскольку давление указывает на обмен и резкое перераспределение и / или время, когда количество свободных страниц ниже того, которое предпочитает система, и активно очищает неактивные страницы и / или меняются страницы, которые, как ожидается, будут использоваться для обмена. Аналогичным образом, система быстро восстанавливается после того, как выделения освобождаются и давление снимается с системы виртуальной памяти.

bmike
источник
Спасибо за разъяснение. Я хотел бы знать, есть ли команда (или набор команд) для вычисления параметров виртуальной памяти, файлового кэша и памяти приложения на снимке экрана выше.
Мухаммед Хасан Наср
@MuhammadHassan Ответ ниже покрывает приятное резюме обратного инжиниринга алгоритма и указывает, где искать в xnuоткрытом исходном коде внутренности. Я вытащил 4 значения, которые наиболее актуальны для отображения давления в графическом интерфейсе.
bmike
30

Чтобы немного прояснить и сделать это предположение более точным: давление памяти - это показатель, используемый ядром (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 . Это показывает вам «манометр», а также события давления.

Просто помогаю
источник
На этом сайте также есть подробная статья - newosxbook.com/articles/MemoryPressure.html, в которой подробно описывается нагрузка на память и обработка в OS X и iOS
user61711,
Удивительная деталь сходства и различий между Mavericks и ядром iOS. Спасибо за ссылку на Process Explorer.
bmike
14

Давление памяти определяется двумя счетчиками, которые Мах хранит внутри:

  • vm_page_free_count: Сколько страниц оперативной памяти сейчас свободно
  • vm_page_free_targetСколько страниц оперативной памяти, как минимум, должно быть оптимально свободно

Вы можете легко увидеть это с помощью sysctl:

morpheus@Zephyr (~/Documents) % sysctl -a vm | grep page_free
vm.vm_page_free_target: 2000
vm.page_free_wanted: 0
vm.page_free_count: 73243

если количество свободных страниц падает ниже целевого количества - у нас ситуация давления.


С http://newosxbook.com/articles/MemoryPressure.html

нет
источник