Process Explorer: что показывает график Commit History?

В графе Память, доступном в Проводнике процессов, верхний график показывает История фиксаций. Что это на самом деле указывает на уровне ОС?

Чтобы поэкспериментировать, если это память, выделенная в куче процессом, я написал небольшую программу, которая поэтапно изменена в 100 МБ много раз. График фиксации истории увеличился на некоторое время (до 1,7 ГБ памяти) и после этого не увеличился, несмотря на память malloc-памяти программы.

Итак, что это за график? Как эта информация может использоваться для понимания/анализа состояния Windows?

Ответ 1

Уровень Commit - это количество анонимного виртуального адресного пространства, выделенного для всех процессов в системе. (Он не содержит виртуального адресного пространства с файловым архивом, например, из файла mmap'd.) В проводнике процессов график "История фиксации" показывает размер этого значения с течением времени.

Из-за того, что виртуальная память распределена и разделена (фактическая RAM-поддержка страницы виртуального адресного пространства необязательно распределяется до ее первого касания), этот текущий уровень "фиксации" представляет наихудший случай (на данный момент ) памяти, которую может потребоваться системе. В отличие от Linux, Windows не будет выдавать promises (адресное пространство) для ОЗУ, которую она не может придумать или подделать (через файл подкачки). Таким образом, как только уровень фиксации достигнет предела для системы (примерно размер файла RAM + страницы), новые распределения адресного пространства не удастся (но новые области использования существующих областей виртуального адресного пространства не будут прерываться).

Некоторые выводы о вашей системе, которые вы можете извлечь из этого значения:

  • Если это значение меньше, чем текущее ОЗУ (за исключением ядра и системных издержек), ваша система вряд ли поменяется (используйте файл подкачки), поскольку в худшем случае все должно соответствовать памяти.
  • Если это значение намного больше, чем использование физической памяти, тогда какая-то программа выделяет много виртуального адресного пространства, но еще не использует его.
  • Выход из приложения должен уменьшить использование фиксированной памяти, поскольку все его виртуальное адресное пространство будет очищено.

Ваш эксперимент подтвердил это. Я подозреваю, что вы столкнулись с ограничениями в адресном пространстве (32-битные процессы в Windows ограничены 2GB... возможно, 300 МБ исчезли в фрагментации, библиотеках и тексте?).