En mi máquina (XP, 64) el proceso de trabajo de ASP.net (w3wp.exe) siempre se inicia con 5.5 GB de memoria virtual reservada. Esto sucede independientemente de la aplicación web que aloja (puede ser cualquier cosa, incluso una página web vacía en aspx).Determine quién/qué reservó 5.5 GB de memoria virtual en w3wp.exe
Este gran trozo de memoria virtual está reservado en el momento en que se inicia el proceso, por lo que no se trata de una "fuga" gradual de memoria de algún tipo.
Algunos husmeando con windbg muestran que la pregunta de memoria es Privada, Reservada y RegionUsageIsVAD, lo que indica que podría ser el trabajo de alguien que llama a VirtualAlloc. También muestra que la memoria en cuestión se asigna/reserva en 4 grandes bloques de 1GB cada uno y varios más pequeños (1/4GB cada uno).
Así que supongo que necesito averiguar quién está llamando VirtualAlloc y reservar toda esta memoria. ¿Cómo puedo hacer eso?
Adjuntar un depurador al proceso antes de la asignación de memoria es complicado, porque w3wp.exe es un proceso iniciado por svchost.exe (es decir, filtro IIS/ASP.Net) y si intento iniciarlo yo mismo en Para depurarlo, simplemente se cierra sin toda esta reserva de memoria profusa. Además, los parámetros de línea de comando no son válidos si los vuelvo a usar (lo cual tiene sentido porque es un conducto creado por el proceso de llamada).
Puedo adjuntar windbg al proceso después del hecho (que es cómo encontré las regiones de memoria en cuestión), pero no estoy seguro de que sea posible en ese momento determinar quién asignó qué.
Solo me gustaría decir "Oh My God" GeorgeTakei>! –
StingyJack
Ese es el primer uso relevante de la nueva etiqueta que he visto (¡fuera de las páginas de Heroes en NBC.com, por supuesto)! –
Veo el mismo comportamiento en Server 2008, IIS7 –