Pregunta

Actualmente estamos usando Apache 2.2.3 y Tomcat 5 (integrado en JBoss 4.2.2) usando mod_proxy_jk como conector.

¿Alguien puede arrojar algo de luz sobre la forma correcta de calcular/configurar los valores siguientes (así como cualquier otra cosa que pueda ser relevante)?Tanto Apache como Tomcat se ejecutan en máquinas separadas y tienen grandes cantidades de RAM (4 GB cada una).

Porciones relevantes de server.xml:

<Connector port="8009"
           address="${jboss.bind.address}"
           protocol="AJP/1.3"
           emptySessionPath="true"
           enableLookups="false"
           redirectPort="8443"
           maxThreads="320"
           connectionTimeout="45000"
    />

Porciones relevantes de httpd.conf:

<IfModule prefork.c>
  StartServers       8
  MinSpareServers    5
  MaxSpareServers   20
  ServerLimit      256
  MaxClients       256
  MaxRequestsPerChild  0
</IfModule>
¿Fue útil?

Solución

Debe considerar la carga de trabajo que podrían tener los servidores.

El factor más importante podría ser el número de clientes conectados simultáneamente en las horas punta.Intente determinarlo y ajuste su configuración de manera que:

  • Hay suficientes subprocesos de procesamiento tanto en Apache como en Tomcat que no necesitan generar nuevos subprocesos cuando el servidor está muy cargado.
  • No hay muchos más subprocesos de procesamiento en los servidores de los necesarios, ya que desperdiciarían recursos.

Con este tipo de configuración puedes minimizar la sobrecarga de mantenimiento interno de los servidores, lo que podría ayudar mucho, especialmente cuando tu carga es esporádica.

Por ejemplo, considere una aplicación en la que tiene aproximadamente 300 solicitudes nuevas por segundo.Cada solicitud requiere en promedio 2,5 segundos para ser atendida.Significa que en un momento dado tienes ~750 solicitudes que deben manejarse simultáneamente.En esta situación, probablemente desee ajustar sus servidores para que tengan ~750 subprocesos de procesamiento al inicio y es posible que desee agregar algo así como ~1000 subprocesos de procesamiento como máximo para manejar cargas extremadamente altas.

También considere exactamente para qué necesita un hilo.En el ejemplo anterior, cada solicitud era independiente de las demás y no se utilizó ningún seguimiento de sesión.En un escenario más "web", es posible que los usuarios inicien sesión en su sitio web y, dependiendo del software utilizado, Apache y/o Tomcat podrían necesitar usar el mismo hilo para atender las solicitudes que llegan en una sesión.En este caso, es posible que necesites más hilos.Sin embargo, como al menos conozco Tomcat, no necesitarás considerar esto, ya que de todos modos funciona con grupos de subprocesos internamente.

Otros consejos

Clientes maximos

Este es el límite fundamental de conexiones de clientes paralelos que su Apache debe manejar de inmediato.

Con prefork, solo se puede manejar una solicitud por proceso.Por lo tanto todo el apache puede procesar a lo sumo solicitudes de $MaxClients en el tiempo que lleva manejar una soltero pedido.Por supuesto, este máximo ideal sólo se puede alcanzar si la aplicación necesita menos de 1/$MaxClients recursos por solicitud.

Si, por ejemplo, la aplicación necesita un segundo de tiempo de CPU para responder a una sola solicitud, configurar MaxClients en cuatro limitará su rendimiento a cuatro solicitudes por segundo:Cada solicitud utiliza una conexión de Apache y Apache solo manejará cuatro a la vez.Pero si el servidor tiene sólo dos CPU, ni siquiera esto se puede alcanzar, porque cada segundo del reloj de pared sólo tiene dos segundos de CPU, pero las solicitudes necesitarían cuatro segundos de CPU.

Servidores MinSpare

Esto le dice a Apache cuántos procesos inactivos deben permanecer.Cuanto mayor sea este número, más carga de ráfaga puede tragar Apache antes de tener que generar procesos adicionales, lo cual es costoso y, por lo tanto, ralentiza la solicitud actual.

La configuración correcta de esto depende de su carga de trabajo.Si tiene páginas con muchas solicitudes secundarias (imágenes, iframes, javascript, css), acceder a una sola página puede consumir muchos más procesos durante un corto período de tiempo.

Servidores MaxSpare

Tener demasiados procesos de Apache sin usar solo desperdicia memoria, por lo que Apache usa el número MaxSpareServers para limitar la cantidad de procesos de repuesto que mantiene en reserva para ráfagas de solicitudes.

Solicitudes máximas por niño

Esto limita la cantidad de solicitudes que manejará un solo proceso a lo largo de su vida.Si está muy preocupado por la estabilidad, debería poner aquí un límite real para reciclar continuamente los procesos de Apache para evitar que las fugas de recursos afecten al sistema.

InicioServidores

Esta es solo la cantidad de procesos que Apache inicia de forma predeterminada.Establezca esto en la cantidad habitual de procesos de Apache en ejecución para reducir el tiempo de calentamiento de su sistema.Incluso si ignora esta configuración, Apache usará los valores Min-/MaxSpareServers para generar nuevos procesos según sea necesario.

Más información

Ver también la documentación para los módulos multiprocesamiento de Apache.

Las configuraciones predeterminadas son generalmente puntos de partida decentes para ver qué van a necesitar realmente sus aplicaciones.No sé cuánto tráfico espera, por lo que adivinar MaxThreads, MaxClients y MaxServers es un poco difícil.Puedo decirles que la mayoría de los clientes con los que trato (trabajo para un servidor web de Linux, que trata principalmente con clientes que ejecutan aplicaciones Java en Tomcat) usan la configuración predeterminada durante bastante tiempo sin necesidad de demasiados ajustes.

Si no espera mucho tráfico, entonces el hecho de que estas configuraciones sean "demasiado altas" tampoco debería afectarle demasiado.Apache no asignará recursos para los 256 clientes potenciales completos a menos que sea necesario.Lo mismo ocurre con Tomcat también.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top