Tengo un sitio web en mi servidor, y mi proceso de trabajo de IIS utiliza 4 GB de RAM de manera consistente. ¿Qué debería estar revisando?IIS Proceso de trabajo utilizando MUCHA memoria?
c:\windows\system32\inetsrv\w3wp.exe
Tengo un sitio web en mi servidor, y mi proceso de trabajo de IIS utiliza 4 GB de RAM de manera consistente. ¿Qué debería estar revisando?IIS Proceso de trabajo utilizando MUCHA memoria?
c:\windows\system32\inetsrv\w3wp.exe
Me gustaría consultar la sección de sintonización de CLR en el document mencionado por Gulzar.
Como señalan los otros carteles, cualquier objeto que implemente IDispose
debería tener llamado cuando haya terminado, preferiblemente usando la construcción using
.
fuego hasta perfmon.exe
y añadir estos contadores:
- Proceso \ bytes privados
- Memoria de .NET CLR Número de bytes en todos los montones Proceso
- \ Espacio de trabajo
memoria- .NET CLR \ Tamaño de montón de objeto grande
Aumento de Bytes privados mientras el número de Bytes en todos los contadores de pilas permanece igual indica el consumo de memoria no administrado.
Un aumento en ambos contadores indica gestionan la memoria consumo
verificación de la sección sobre los cuellos de botella de solución de problemas en Tuning .NET Application Performance
Si tiene acceso al código fuente, es posible que desee comprobar que los objetos que implementan IDisposable se están referenciados dentro using
declaraciones o estando dispuestos adecuadamente de cuando termines con ellos.
Using
es una construcción C#, pero la idea básica es liberar recursos cuando haya terminado.
Otra cosa para comprobar es que los objetos grandes se ponen en el estado de la sesión "en proceso" o caché.
Más detalles definitivamente ayudaría. ¿Cuántas aplicaciones se están ejecutando dentro del grupo de aplicaciones? ¿Hay aplicaciones ASP.NET en el grupo?
Si está ejecutando ASP.NET, eche un vistazo a lo que está almacenando en las variables de la sesión y del caché. Use PerfMon para verificar cuántas colecciones de Generación 0, 1 y 2 están ocurriendo. Tenga cuidado con el almacenamiento de los elementos de la IU en el estado o la memoria caché de la sesión, ya que esto evitará que se recopile toda la instancia de la página y todos los hijos de la instancia de la página. Finalmente, verifique si está haciendo una gran cantidad de concatenación de cadenas. Esto puede causar muchas instancias de objetos, ya que las cadenas .NET son inmutables. Considera usar StringBuilder en su lugar.
Cree un mini-volcado del proceso w3wp y use WinDbg para ver qué objetos hay en la memoria. Esto es lo que hace el equipo de soporte de IIS en Microsoft cada vez que reciben preguntas como esta.
Sí, pero si las cadenas están en el montón de objetos grandes, que se recogerán sólo durante Gen 2 colecciones si no estoy equivocado. – Maxam