Мои w3wp перерабатываются каждые 60 секунд после использования слишком большого количества виртуальной памяти.
Я запустил Средство диагностики отладки IIS захватить дамп памяти до перезапуска рабочего процесса; кажется, самая интересная часть такова:
Virtual Allocation Summary
Reserved memory 4.88 GBytes
Committed memory 328.27 MBytes
Mapped memory 17.36 MBytes
Reserved block count 524 blocks
Committed block count 1082 blocks
Mapped block count 43 blocks
Так что 4,88 ГБ зарезервированной памяти кажутся действительно большими. Но ни DotNetMemoryAnalysis, ни обычный анализатор давления памяти, кажется, не говорят мне, куда делись эти 4,88 ГБ.
Как я могу узнать?
Виртуальная память не является дефицитным ресурсом. Операционная система может создавать их огромные количества практически без затрат. Так что нет причин беспокоиться о потреблении виртуальной памяти. Вы можете просто игнорировать это. Дэвид Ван очень подробно рассматривает этот конкретный вопрос в Сообщение блога если вы хотите мельчайших деталей.
Все, что перерабатывается на основе потребления виртуальной памяти, необходимо изменить, чтобы этого не произошло, поскольку это не имеет смысла. Если вы сопоставите память с файлом размером 4 ГБ, вы будете использовать 4 ГБ виртуальной памяти, хотя реальные системные ресурсы, необходимые для этого, тривиальны. (И он не будет отображаться как отображенная память, потому что «отображенная память» учитывает только страницы, в которых произошел сбой.)
Переработка процессов на основе виртуальной памяти совершенно бесполезна.