memoria de cerdos w3wp.exe

8

En una instalación de Small Business Server 2011, una gran cantidad de procesos w3wp.exe parecen estar utilizando una gran cantidad de memoria desproporcionada. Las instalaciones listas para usar de SBS vienen con un total de 7 sitios y 20 grupos de aplicaciones ASP.NET (Sharepoint, Exchange, WSUS y cosas específicas de SBS como Remote Web Workplace).

La docena resultante de procesos w3wp.exe tiende a consumir más de 4 GB de memoria del servidor a lo largo del tiempo, siendo el grupo de aplicaciones pico el que pertenece a WSUS con alrededor de 800 MB en el conjunto de trabajo. Reciclar manualmente los grupos de aplicaciones a través de IIS MMC ayuda a reducir temporalmente el uso de memoria (los procesos w3wp.exe se reducen a 10 MB, algunos de ellos vuelven a crecer rápidamente), pero obviamente no es algo que un administrador quiera hacer todo el día. No pude encontrar ninguna recomendación sobre el reciclaje automático de los grupos de aplicaciones preinstalados de SBS, por lo que soy un poco reacio a "simplemente hacerlo" en los sistemas de producción.

Mi investigación en la red sobre cómo limitar esto solo arrojó una serie de publicaciones que indicaban que el consumo de memoria w3wp no dañaría pero beneficiaría el rendimiento ya que la memoria sería "liberada cuando otras aplicaciones lo necesitaran". El problema es que no funciona:

  • por un lado, un SBS es un servidor de múltiples funciones, una de las funciones (la principal) es el almacenamiento de red CIFS que se beneficia enormemente del almacenamiento en caché del sistema de archivos que nuevamente depende de que la memoria sea "libre" como "no utilizada por otros procesos en ningún way ": los grupos de aplicaciones ASP.NET que casi nunca ven usuarios y comen memoria son contraproducentes
  • Otra cosa es que todavía tengo que ver una disminución sustancial del consumo de memoria de las instancias de w3wp ante la escasez de memoria; lo que veo es una disminución menor en significativamente menos de 100 mb y un intercambio excesivo en su lugar, nuevamente perjudicando el rendimiento

Casi nunca administro aplicaciones IIS o ASP.NET, por lo que cualquier idea sobre cómo recortar eficazmente los requisitos de memoria para los grupos de aplicaciones es bienvenida.

el wabbit
fuente
¿Qué hace esta aplicación ASP.NET? He visto que w3wp.exe usa mucha memoria cuando una aplicación no puede cerrar las conexiones con Linq-To-SQL o Entity Framework.
Nate
Hay varios. Muchos están relacionados con Exchange como los servicios OWA / OMA y Sync, uno excepcionalmente grande es WSUS, algunos se usan para Sharepoint o sitios personalizados específicos de SBS (CompanyWeb, Remote Web Workplace)
the-wabbit

Respuestas:

7

Bienvenido al maravilloso mundo de SBS. Requisitos recomendados para RAM = 10 GB ... y REQUIERE un mínimo de 8 gb. ( según Microsoft ) por una buena razón. No es una máquina bien engrasada ... es muy descuidada, hinchada y tiene todo bajo el sol. Cuanta más RAM puedas arrojar a esa caja ... mejor. Desafortunadamente, estás limitado a 32 gb máximo. Qué imho ... es tonto.

TheCompWiz
fuente
Supongo que debería refinar mi respuesta un poco. Si le preocupa la cantidad de RAM que está consumiendo, ahorrará mucho tiempo / dolores de cabeza al hacer una de las siguientes cosas: A) No use SBS ... use un servidor estándar y configure las funciones que NECESITA individualmente. o B) Agregue más RAM al sistema ... ya que la RAM es bastante barata. SBS está diseñado para oficinas muy pequeñas ... (10-20 estaciones de trabajo ...) y no escala muy bien.
TheCompWiz
Gracias por tu respuesta. El sistema donde observé el comportamiento tenía 16 GB de RAM, que es el límite físico. La memoria disponible se llenó rápidamente con el archivo store.exe de Exchange y numerosas instancias de SQL Server y w3wp.exe que no solo "no están bien ajustados", sino que son totalmente descabellados. Sé cómo lidiar con los problemas de consumo excesivo de memoria de los otros dos, ya que manejo los sistemas Exchange y SQL Server con frecuencia, pero con w3wp estoy algo perdido. La red en sí tiene solo 11 usuarios.
the-wabbit
Exchange, SQL Server e IIS tienen mecanismos que intentarán consumir el 100% de la RAM para los datos "en caché". Si algo más requiere más RAM ... se supone que los 3 deben reducir su escala para permitir que otros servicios se ejecuten sin recurrir al intercambio. (en teoría) En la práctica, sin embargo, encuentro que solo tienes que rodar con los golpes en algunas cosas ... Puedes intentar ajustar todo manualmente y establecer límites duros ... pero siempre estarás persiguiendo tu cola ese. Veré si puedo encontrar un artículo que leí hace unos años sobre
cómo
7

Esto es lo que terminé haciendo:

configurando el caché de la aplicación del servidor para .NET AppPools en un valor bajo (5 MB) configurando el parámetro privateBytesLimit en web.configat %WINDIR%\Microsoft.NET\Framework\<version>\Configcomo se sugiere en esta respuesta :

    <configuration>
      <system.web>
         <caching>
           <cache privateBytesLimit="5242880" privateBytesPollTime="00:01:00" />
         </caching>
      </system.web>
    </configuration>

Esto ayudó a reducir el uso de memoria a algo más de 1 GB con la configuración predeterminada de reciclaje del grupo.

Aparentemente, usar el tipo de "servidor" del recolector de basura ( <gcServer = "true">) también puede conducir a un consumo significativo de memoria , pero como parece, <gcServer>está configurado en falso de manera predeterminada.

el wabbit
fuente
Para su información, hace un tiempo comenzamos a configurar gcserver en falso después de leer estos artículos: forums.asp.net/t/1654596.aspx/1 y msdn.microsoft.com/en-us/library/ff647787.aspx
Greg Askew
@ the-wabbit ¿El consejo para configurar gcServer = false sigue vigente ahora que la recolección de basura del servidor ocurre simultáneamente?
Michael Steele
6

Si sospecha que el consumo de memoria resultante es un problema debido a un defecto de software, puede usar Microsoft DebugDiag 1.2 para crear un volcado de memoria completo y analizar el volcado en busca de problemas comunes. Si cree que puede haber un problema de memoria, debe habilitar el seguimiento de fugas seleccionando la opción "Supervisar fugas" y dejar que se ejecute durante un tiempo antes de crear / analizar el volcado.

DebugDiag 1.2 Descargar
https://www.microsoft.com/download/en/details.aspx?id=26798

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

Greg Askew
fuente
Gracias por el enlace, voy a intentarlo. El paquete de instalación de MSI aparentemente tiene problemas cuando se ejecuta en versiones localizadas (no en inglés de EE. UU.) De Windows, tengo que ver si hay una solución para esto.
the-wabbit
2

No necesita un grupo de aplicaciones separado para cada aplicación, solo aquellas que no son confiables o a las que desea dar prioridad. Muchos pueden compartir (manteniendo diferentes versiones de .net separadas). Luego puede limitar de manera más realista la memoria que usará un grupo de aplicaciones. No debería haber necesidad de reciclar repetidamente las piscinas más de una vez al día.

Además, solo hay tanta memoria que se puede liberar de esta manera. Si bien parte de ella será caché, cada aplicación necesita una cierta cantidad de memoria de trabajo que depende en gran medida de la aplicación web específica. Intentar restringir esto demasiado hará que las cosas se detengan.

El problema realmente es que SBS intenta hacer demasiado de una vez, necesita mirar lo que realmente usa y apagar lo que no hace.

Pero para ser sincero con solo 11 usuarios, ¿a dónde va el resto de la memoria? ¡Exchange y SQL para uso ligero ciertamente no necesitan más de 12 Gb!

JamesRyan
fuente
Ah, nunca experimentaste la belleza de un SBS, ¿verdad? El almacén de información de Exchange crece a 8 GB cuando no está restringido, varias instancias del servidor SQL ocuparán felizmente otros 3 GB. La mayoría de los grupos de aplicaciones ejecutan solo 1-2 aplicaciones con la misma versión .NET y dentro del mismo contexto de seguridad. Sin embargo, no puedo reagruparlos debido a problemas de soporte. Además, es poco probable que resuelva los problemas de memoria: si solo tengo 4 procesos de 1 GB en lugar de 12 más pequeños, no se gana mucho.
the-wabbit
La diferencia con tener menos grupos de aplicaciones es que los diversos cachés estarán llenos de lo que se usa regularmente, eliminando lo que no es. Con muchos grupos de aplicaciones habrá más desperdicio. ¿Cuántos contextos de seguridad necesitas realmente con 11 usuarios? Sí, Exchange utilizará alegremente la mayor cantidad de memoria que pueda tener a mano, pero también funcionará felizmente con solo 2 GB para esos pocos usuarios si la restringe. Con SBS, debe aceptar que no puede utilizar las mejores prácticas en todas partes o ejecutar cualquiera de las opciones de manera óptima, debe ser un poco pragmático y no exagerar en las cosas.
JamesRyan
Bueno, si está intentando ejecutar 20 instancias de él en un servidor, no es de extrañar que esté intentando guardarlo todo en la memoria. Realmente deberías haber mencionado eso en la pregunta, ya que pone las cosas en una luz completamente diferente.
JamesRyan
En realidad no lo hago, como dije, el problema surge con un sistema físico en el que los grupos de aplicaciones raramente utilizados roban memoria del caché del sistema de archivos mucho más valioso. Sospeché que esto se debería a algún almacenamiento en caché de objetos dentro de los grupos de aplicaciones y estaba buscando algunos medios para reducir / deshabilitar el caché.
the-wabbit