Давление памяти не является простым показателем процентной доли свободной памяти и, похоже, представляет собой график от 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 ГБ ОЗУ, перенесенной на диск, я не хотел заполнять свой диск и выходить из инструмента.
Вы можете наблюдать, как быстро система освобождала ОЗУ после того, как предупреждение было снято, а также как оно переходило на «красную» территорию, чтобы показать, что система виртуальной памяти не может сжать достаточно страниц, чтобы избежать подкачки на диск. Мое обоснованное предположение - красный, поскольку давление указывает на обмен и резкое перераспределение и / или время, когда количество свободных страниц ниже того, которое предпочитает система, и активно очищает неактивные страницы и / или меняются страницы, которые, как ожидается, будут использоваться для обмена. Аналогичным образом, система быстро восстанавливается после того, как выделения освобождаются и давление снимается с системы виртуальной памяти.