corresponds application asp.net iis memory iis-7

asp.net - application - process id iis



Uso de memoria alta con el grupo de aplicaciones w3wp IIS 7 (4)

Tengo una aplicación de sitio web ejecutándose en su propio grupo de aplicaciones en IIS 7.0. La aplicación es un sitio web ASP.NET MVC 3.

Me he dado cuenta de que el uso de la memoria para estas aplicaciones correspondientes al servicio de trabajo IIS de w3wp es bastante alto (800 MB, con algunas fluctuaciones).

Estoy tratando de diagnosticar el problema y he intentado lo siguiente:

He desactivado el almacenamiento en caché de la página de salida para el sitio web en el nivel IIS y luego he reciclado el grupo de aplicaciones. Esto hace que el proceso w3wp se reinicie. El uso de la memoria para este proceso sube lentamente hasta unos 800 MB, tarda unos 30 segundos en hacerlo. No hay solicitudes de página en este momento. Cuando reinicio el sitio web desde IIS, el tamaño de la memoria del proceso no se altera.

He intentado ejecutar una copia de depuración de la aplicación de VS 2010, no hay problemas con el uso de la memoria.

Algunas ideas que tengo / preguntas son:

¿Este problema está relacionado con el código de los sitios web? - Dado que los cohetes de memoria antes de que se hayan enviado / gestionado las solicitudes de página, supongo que esto NO es un problema de código.

La aplicación incorporada en MVC no maneja el almacenamiento en caché escrito en ella.

El sitio web utiliza la visualización de datos en tiempo real, utiliza las solicitudes ajax periódicamente, y generalmente se deja ''abierto'' durante largos períodos de tiempo.

¿Por qué el uso de la memoria se dispara después de que la aplicación se recicla y no se envían solicitudes de los usuarios? ¿Esto es porque está cargando información del viejo caché en su memoria del disco?

La aplicación NO falla, solo me preocupa el uso de la memoria, no es tan grande en un sitio web ...

Cualquier idea / ayuda para llegar al fondo de este problema sería apreciada.


Algo que podría ayudar: si "reescribe" (abre / guarda) el archivo web.config, su aplicación se reiniciará, debe controlar el uso de memoria desde ese punto. Si sigue creciendo durante el uso, esto podría significar pérdida de memoria o almacenamiento en caché insano. Es posible que pueda identificar qué acciones en su sitio conducen a un aumento de la memoria. Durante mucho tiempo, el uso de la memoria de una aplicación debe ser estable.


Lo mejor que puede hacer si puede permitirse usar un depurador es instalar las herramientas de depuración de Windows y usar algo como WinDbg y SOS.dll para averiguar exactamente qué hay en la memoria.

Una vez que haya instalado las herramientas, puede:

  1. Inicie Windbg.exe corriendo elevado (como Administrador)
  2. Use "Archivo-> Adjuntar al proceso" y elija w3wp.exe para la aplicación que está tratando de descifrar. Si tiene muchos, puede usar el Administrador de tareas y agregar la columna de la línea de comandos para ver el PID o usar el Administrador IIS-> Procesos de trabajo para resolverlo, y luego elegir ese proceso en WinDBG.
  3. correr:
  4. .loadby sos clr
  5. ! dumpheap -stat

En ese punto, debería poder ver todos los tipos ordenados por el mayor consumo de memoria para que pueda comenzar con los que están en la parte inferior. (Recomendaría Excluir Cadenas y Objetos, ya que estos suelen ser un efecto secundario y no la causa). Utilice "! Dumpheap -type type-here" para encontrar las instancias y use! Gcroot para que descubran por qué están en la memoria, quizás debido a un campo estático, o un controlador de evento filtrado, canales WCF no eliminados, o cosas como que son fuentes comunes.


Probablemente no se aplica aquí, pero pensé que lo lanzaría en buena medida. Recientemente tuve un problema en el que mi memoria aumentaría y se agotaría cuando podría limpiar el 80% de ella. Problema: Pensó que se trataba de 2 conciertos más de lo que realmente hizo, por lo que el GC fue bastante vago. (Se debió a un error de VM ware -windows estaba informando 8 Gig, pero físicamente solo había 6.4). Ver blog. http://www.worthalook.net/2014/01/give-back-memory/


Solo miro mi servidor y mis pools usan 900-1000MB de memoria de tamaño virtual y 380MB de conjunto de trabajo. Mis sitios se ejecutan sin problemas desde hace algunos años, y los he comprobado por todos lados. Mi grupo nunca se recicla y el servidor se ejecuta hasta la próxima actualización de forma continua con una memoria física libre del 40% estable.

Si su memoria no continúa, entonces esta memoria es el código más los datos que establece como estáticos, const, la cadena y el posible caché, dentro de su aplicación.

Puede usar Process Explorer para ver la memoria de trabajo y la de tamaño virtual.

También puede pensar en ejecutar un perfil contra su código para ver si tiene alguna "fuga de memoria" u otro problema. Encuentre uno de google: https://www.google.com/search?hl=en&q=asp.net+memory+profiler .