¿Cuál es la memoria máxima que puede usar un sitio web / grupo de aplicaciones IIS6?

8

Tengo un servidor IIS 6 ejecutándose en Windows 2003 SP2 x86. El servidor tiene 4 GB de RAM y funciona de manera consistente con 2 GB asignados.

Me doy cuenta de que con x86, el servidor no utilizará todos los 4 GB de RAM y el espacio de la aplicación también es limitado, pero los procesos de IIS parecen estar limitados en otros lugares. w3wp.exe nunca tiene más de 500 MB asignados y ocasionalmente obtengo excepciones de OutOfMemory de una aplicación .NET ocupada (hay varias aplicaciones ejecutándose, cada una con un grupo de aplicaciones separado).

¿Cuál es la memoria máxima que puede usar un sitio web / grupo de aplicaciones IIS6?

Robin M
fuente

Respuestas:

7

Las aplicaciones en Windows x86 están limitadas a 2 gb / ea. Puede cambiar esto agregando el indicador / 3gb a boot.ini, pero esto puede causar un comportamiento inesperado de la aplicación y debe usarse con precaución. MS oficialmente no es compatible con esto ( http://technet.microsoft.com/en-us/library/bb124810.aspx )

Los límites de memoria de IIS se pueden establecer en la pestaña Reciclaje en el grupo de aplicaciones correspondiente.

¿Cómo determina que la aplicación nunca supera los 500 MB? Si está utilizando el Administrador de tareas, tenga en cuenta que rara vez (si es que lo hace) es una representación precisa del uso de la memoria tal como lo entiende Windows. Utilice el Explorador de procesos: http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx

Hay una serie de otras preguntas relevantes:

  • ¿Hay errores registrados en sus registros de eventos?
  • ¿Es una línea particular de código que arroja las excepciones? Si es así, ¿esta excepción OutOfMemory es realmente un problema de IIS o un problema de código?
  • ¿Está limitando sus grupos de aplicaciones con la configuración de Reciclaje?
  • ¿Hay otros servicios ejecutándose en esta máquina?

Lo más probable es que IIS, ASP.NET y todos sus equipajes asociados se estén ejecutando contra el límite de 2 GB a pesar de que el Administrador de tareas de Windows no lo muestra. Establecer límites de reciclaje o actualizar a x64 probablemente hará una gran diferencia.

sh-beta
fuente
3

ocasionalmente obtiene excepciones de OutOfMemory de una aplicación .NET ocupada

La respuesta a esto es demasiado compleja para encajar en una respuesta. Consulte " Ajuste del rendimiento de la aplicación .NET " para obtener un tratamiento completo del tema.

Aquí hay un resumen muy simplificado (pero aún bastante bueno) de Bruno Jouhier :

Además, el tiempo de ejecución .NET no te permite subir hasta 2 GB. El recolector de basura funciona copiando objetos vivos, por lo que necesita una buena cantidad de espacio para realizar sus copias.

Editar:

Aquí está mi intento de una explicación ...

Si se pregunta cuál es el tamaño máximo de memoria del proceso de trabajo (según lo informado por el Administrador de tareas) para un Proceso de trabajo ASP.NET en x86, la respuesta es "depende" .

En cualquier tipo de código administrado como Java o .NET, el programador cede el control de la memoria como una penitencia por no tener que lidiar con punteros. A medida que se ejecuta un programa, el recolector de basura limpiará periódicamente el montón y la pila .

Específicamente en lo que respecta a ASP.NET, el recolector de basura se ejecuta dentro del mismo proceso de trabajo que el sitio web. El GC consume memoria propia. La cantidad de memoria es completamente una función de cómo se escribe el código de su aplicación. Una aplicación puede usar 1,8 GB de memoria, mientras que otra puede ahogarse a 500 MB. Para entender por qué , debe perfilar su aplicación específica.

Portman
fuente
Estoy de acuerdo en que depurar las excepciones de OutOfMemory es complejo, gracias por el enlace. Sin embargo, estoy preguntando cómo la memoria es limitada y debería ser posible responder eso.
Robin M
2

Cualquier proceso en un sistema operativo Windows x86 está limitado a 2 gb a menos que haya configurado el modificador / 3 gb en su archivo boot.ini, en cuyo caso un proceso puede usar 3 gb.

Steve Evans
fuente
Sí, pero no estoy cerca de 2GB para un proceso.
Robin M
2

De esta publicación de blog "Recomendaciones para la configuración del grupo de aplicaciones de SharePoint" :

Centrándome en lo físico, generalmente me gusta limitar los grupos de aplicaciones de alrededor de 800 MB a 1200 MB como máximo en una aplicación de 32 bits con muy pocos grupos de aplicaciones dependiendo de la cantidad y la cantidad de memoria. En un servidor con 2 GB de RAM, lo establecería en alrededor de 800 MB como máximo. En un servidor de 4 GB de RAM, alrededor de 1 GB y más, con un máximo de alrededor de 1200. En un front-end web de 64 bits con memoria de 8-16 GB, he oído hablar de configuraciones de 2 GB de RAM o incluso de permitir que funcione, en lugar de limitarlo.

Realmente necesita crear un perfil ya que estos realmente pueden crecer para procesar y almacenar en caché. Cuanto mayor sea la cantidad de memoria y mayor sea la carga, mayor será el crecimiento del proceso de trabajo. Cuando las personas preguntan sobre la configuración del grupo de aplicaciones, aquí es donde generalmente preguntan cuáles deberían ser los números. Lo que está haciendo aquí es limitar explícitamente que el grupo de aplicaciones consuma más memoria. Observe que esta configuración está en la pestaña de reciclaje, hay una razón para eso.

Cuando un grupo de aplicaciones alcanza el máximo, no es como la configuración máxima del procesador. Ciclo el proceso de trabajo que es como un pequeño reinicio o similar a un iisreset, pero no porque a veces queremos que esto suceda para que podamos liberar nuestra memoria. Realmente no desea hacer un ciclo más de un par de veces por período de 24 horas en un mundo ideal. He oído hablar de algunos que intentan hacer un ciclo justo antes de que ocurra el pico de la mañana para que tengan la mayor cantidad de memoria disponible, luego un ciclo justo al final del día antes de que comiencen las copias de seguridad o el rastreo.

Según mi experiencia, 800 MB es el umbral para máquinas de 32 bits (2-4 GB de RAM). Recicla grupos de aplicaciones antes de lanzar excepciones de "falta de memoria".

splattne
fuente
2

Asegúrese de no configurar el tamaño de la memoria virtual en su grupo de aplicaciones. Si establece este valor en un número fuera del rango permitido, se revertirá a 512 MB. Ver KB923197 .

También tenga en cuenta que si está ejecutando una aplicación ASP.Net, ASP.Net reciclará el grupo al 60% del límite de memoria de 2 GB, o 1.2 GB. Este no es su escenario de ~ 500, pero en aplicaciones de 32 bits con gran uso de memoria, a veces modificamos esto para obtener un poco más de memoria.

<system.web> 
  <processModel memoryLimit="80" />
</system.web> 
Christopher_G_Lewis
fuente
1

En Windows 2003, puede configurar la Extensión de asignación física (PAE) para utilizar toda la memoria. La memoria predeterminada para un grupo de aplicaciones IIS6 es de 5 MB .

Comunidad
fuente
Ok, pero eso no explica por qué el proceso está limitado a 500 MB. La memoria predeterminada para un grupo de aplicaciones es interesante pero no realmente relevante o útil, ¡lo siento!
Robin M
¿Está ejecutando SQL en el mismo cuadro por casualidad?
No. SQL no está en el mismo cuadro. Está limitado a web / ftp / smtp usando IIS.
Robin M