Você está na página 1de 8

Apache Performance Tuning

Artículos DeveloperSide.NET

Advertencia:
"La optimización prematura es la raíz de todo mal". - Donald Knuth.

... en otras palabras, no se aplique en la complejidad adicional si no lo necesita. Un sitio de manejo de

unos pocos miles de peticiones por día lo hará bien en una configuración por defecto y casi en cualquier

hardware. Este artículo está dirigido a un sitio que tiene que manejar múltiples peticiones concurrentes

[diez a varios cientos por segundo].

General [en orden de importancia]

RAM

El mayor problema que afecta al rendimiento del servidor web es la memoria RAM. Tienen tanta RAM

como su hardware, sistema operativo, y los fondos lo permitan [dentro de la razón].

La memoria RAM de su sistema más tiene, más los procesos de [e hilos] Apache pueden asignar y utilizar,

lo que se traduce directamente en la cantidad de solicitudes simultáneas / clientes Apache puede servir.

En términos generales, el disco I / O es generalmente una estrecha 2 º, seguido por la velocidad de la

CPU y el enlace de red. Tenga en cuenta que un solo PII 400 Mhz con 128-256 megas de RAM puede

saturar un T3 (45 Mbps) en línea.

Seleccione MPM

Elija el MPM adecuado para el trabajo adecuado:

[MPM prefork por defecto de Apache 2.0 y 1.3]:

 Basado en Apache 1.3.


 Varios procesos, 1 hilo por proceso, los procesos de atender las peticiones.
 Utilizadas para la seguridad y la estabilidad.
 Tiene un consumo de memoria de mayor y menor rendimiento en la nueva versión
2.0 de Apache basada en MPMs rosca.

de los trabajadores:

 Basado en Apache 2.0.


 Múltiples procesos, muchos hilos por proceso, los hilos atender las peticiones.
 Se utiliza para el consumo de memoria menor y mayor rendimiento.
 No proporciona el mismo nivel de aislamiento de la solicitud a la solicitud, como un
proceso basado en MPM hace.
WinNT:

 La elección MPM sólo bajo Windows.


 1 proceso padre, exactamente el proceso 1 niño con muchos hilos, hilos de atender
las peticiones.
 La mejor solución en Windows, como en esta plataforma, las discusiones son
siempre "más barato" para su uso en los procesos.

Configurar MPM

Características core y multi-Módulos de

Configuración predeterminada

<IfModule Prefork.c>

StartServers 8

MinSpareServers 5

MaxSpareServers 20

MaxClients 150

MaxRequestsPerChild 1000

</ IfModule>

<IfModule Worker.c>

StartServers 2

MaxClients 150

MinSpareThreads 25

MaxSpareThreads 75

ThreadsPerChild 25

MaxRequestsPerChild 0

</ IfModule>

<IfModule Mpm_winnt.c>

ThreadsPerChild 250

MaxRequestsPerChild 0

</ IfModule>

Directivas

MaxClients, para MPM prefork


MaxClients establece un límite en el número de conexiones simultáneas / solicitudes que serán atendidas.

Considero que esta directiva sea el factor crítico a un servidor que funcione bien. Establezca este número

demasiado bajo y los recursos irán a los residuos. Establezca este número demasiado elevado y una

afluencia de conexiones traerá el servidor a un detenido. Establezca este número apenas a la derecha y

su servidor de utilizar plenamente los recursos disponibles.

Una aproximación de este número debe ser obtiene dividiendo la cantidad de memoria de sistema (RAM

física) a disposición por el tamaño máximo de un apache / httpd proceso, con una generosa cantidad

ahorrado para los demás procesos.

MaxClients ≈ (RAM - size_all_other_processes)/(size_apache_process)


MaxClients ≈ (RAM - size_all_other_processes) / (size_apache_process)

Utilice ps '-httpd ylc - tipo: rss' para encontrar el tamaño proceso. Divide el número por 1024 para

obtener megabytes. Prueba también 'top'.

Uso Libre '-m' para una visión general. La figura clave a considerar es la buffers / cache valor usado.

Vmstat uso '2 5' para mostrar el número de ejecutables, bloqueado, y los procesos de espera, y de

intercambio dentro y fuera de intercambio.

Ejemplo:

 Sistema: VPS (Virtual Private Server), CentOS 4.4, con 128 MB de RAM
 Apache: v2.0, mpm_prefork, mod_php, mod_rewrite, mod_ssl, y otros módulos
 Otros Servicios: MySQL, BIND, Sendmail
 Informó de la memoria del sistema: 120 MB
 Informó de tamaño proceso httpd: 7-13MB
 Memoria se supone que dispone de Apache: 90MB

Los ajustes óptimos:

 StartServers 5
 MinSpareServers 5
 MaxSpareServers 10
 ServerLimit 15
 MaxClients 15
 MaxRequestsPerChild 2000

Con la configuración anterior, comenzamos con los procesos de 5-10 y establecer un límite máximo de

15. Cualquier cosa por encima de este número será causa grave de intercambio y trilla con una

sobrecarga, debido a la baja cantidad de RAM disponible para el [virtual] Server. Con un servidor

dedicado, los valores por defecto [ServerLimit 256] funciona con 1-2GB de memoria RAM.
Cuando MaxClients cálculo, tener en cuenta que el tamaño indicado de un proceso y el tamaño efectivo

son dos valores diferentes. En esta configuración, puede ser seguro de utilizar 20 o más trabajadores ...

Juega con diferentes valores y comprobar las estadísticas de su sistema.

Tenga en cuenta que cuando más conexiones se intentó que se encuentran los trabajadores, las

conexiones se colocan en una cola. La cola de valor por defecto el tamaño es de 511 y se puede ajustar

con la directiva ListenBacklog.

MPM ThreadsPerChild, para winnt

Por el lado de Windows, la directiva sólo es útil ThreadsPerChild, que suele establecerse en un valor de

250 [por defecto a 64 sin un valor]. Si usted espera más, o menos, conexiones concurrentes / solicitudes,

definir esta directiva adecuadamente. Tamaño del proceso de comprobación con el Administrador de

tareas, en virtud de diferentes valores y la carga del servidor.

MaxRequestsPerChild

MaxRequestsPerChild Directiva se utiliza para procesos de reciclaje. Cuando esta directiva está

establecido en 0, una cantidad ilimitada de las solicitudes son permitidos por proceso.

Mientras que algunos podrían argumentar que esto aumenta el rendimiento del servidor Apache con una

carga no tener que destruir y crear nuevos procesos, no existe el otro lado el argumento ...

Establecer este valor a la cantidad de solicitudes que un sitio web genera por día, dividido por el número

de procesos, tendrá el beneficio de mantener las pérdidas de memoria y la hinchazón proceso a un

mínimo [ambos de los cuales son un problema común]. El objetivo aquí es reciclar cada proceso una vez

al día, como hilos de apache aumentar progresivamente su asignación de memoria como se ejecutan.

Tenga en cuenta que en el modelo MPM winnt, el reciclado de la solicitud sólo sirven proceso que incluye

Apache, puede presentar un problema para algunos sitios con tráfico constante y pesada.

Pide vs conexiones de cliente

En cualquier conexión determinada, para cargar una página, el cliente puede solicitar de URL: página, los

archivos CSS del sitio, los archivos JavaScript, archivos de imagen, etc

Múltiples peticiones de un cliente en una rápida sucesión puede tener el mismo efecto en un servidor

como "concurrente" conexiones [rosca MPMs y directiva KeepAlive tomarse en consideración]. Si un sitio

web particular, requiere de 10 solicitudes por página, 10 clientes simultáneos requerirá ajustes de MPM

que se orienta más a 20-70 clientes. Este problema se manifiesta más en un proceso basado en MPM

[prefork].

Separa estático y contenido dinámico


Utilizar servidores distintos para el contenido estático y dinámico. Apache procesos de contenido

dinámico que sirve llevará a gastos generales y se hinchan con el tamaño del contenido que se está

servido, nunca disminuye en tamaño. Cada proceso se incurren en el tamaño de cualquier carga o

bibliotecas de PHP Perl. A 6 MB y 30 MB de tamaño proceso [o el 10% de la memoria del servidor], no es

inusual, y se convierte en una cintura de los recursos para servir contenido estático.

Para un uso más eficiente de la memoria del sistema, puede usar tanto mod_proxy para pasar las

peticiones específicas a otro servidor Apache, o utilizar un servidor de peso ligero para manejar las

solicitudes estática:

 lighttpd [tiene experimental se basa win32]


 Tux [parche en RedHat, se ejecuta dentro del núcleo de Linux y está en la cima de
las listas de éxitos en los resultados]

El servidor de manejo de contenido estático va en la delantera.

Tenga en cuenta que los ajustes de configuración será muy diferente entre un servidor de contenido

dinámico y un servidor de contenido estático.

mod_deflate

Reducir el ancho de banda en un 75% y mejorar el tiempo de respuesta mediante el uso de mod_deflate.

LoadModule deflate_module modules/mod_deflate.so


<Location />
AddOutputFilterByType DEFLATE text/html text/plain text/css text/xml
application/x-javascript
</Location>

Módulos cargados

Reducir la huella de memoria cargando solamente los módulos necesarios.

Algunos también aconsejan a compilar de forma estática en los módulos necesarios, sobre la construcción

de DSO (Dynamic Shared Objects). Consejo muy malo. Tendrá que reconstruir manualmente Apache

cada vez que una nueva versión o la seguridad de asesoramiento para un módulo es puesto out, creando

más trabajo, más dolores de cabeza relacionados con la construcción, y más tiempo de inactividad.

mod_expires

Incluir mod_expires de la habilidad de fijar las fechas de vencimiento de los contenidos específicos,

utilizando el "If-Modified-Since" control de caché encabezado enviado por el navegador del usuario /

servidor proxy. Ahorrará ancho de banda y acelerar drásticamente su sitio para que [la repetición]

visitantes.

Tenga en cuenta que esto también puede ser implementada con mod_headers.
KeepAlive

Habilitar conexiones HTTP persistentes a mejorar los tiempos de latencia y reducir la carga del servidor

de forma significativa [25% de la carga original no es poco común].

MPM prefork:

KeepAlive On
KeepAliveTimeout 2
MaxKeepAliveRequests 80

de los trabajadores y MPMs winnt:

KeepAlive On
KeepAliveTimeout 15
MaxKeepAliveRequests 80

Con el MPM prefork, se recomienda establecer 'KeepAlive' a 'Off'. De lo contrario, el cliente atar todo un

proceso para que el lapso de tiempo. Aunque en mi experiencia, es más útil para simplemente establecer

el "valor KeepAliveTimeout a algo muy bajo [2 segundos parece ser el valor ideal]. Esto no es un

problema con el MPM worker [hilo basados], o bajo Windows [que sólo tiene el hilo basados MPM winnt].

Con el trabajador y MPMs winnt, el tiempo de espera de 15 segundos por defecto está configurado para

mantener la conexión abierta para la solicitud de la página siguiente, para manejar mejor un cliente que

va de enlace en enlace. Compruebe los registros para ver cuánto tiempo permanece un cliente en cada

página antes de pasar a otro vínculo. Valor de ajuste apropiadamente [no establece más de 60

segundos].

Enlaces simbólicos

Asegúrese de que 'Options + FollowSymLinks-SymLinksIfOwnerMatch' se establece para todos los

directorios. De lo contrario, Apache emitirá una llamada al sistema adicional por componente nombre de

fichero para demostrar que el nombre del archivo no es un enlace simbólico, y más llamadas al sistema

para que coincida con un propietario.

<Directory />
Options FollowSymLinks
</Directory>

AllowOverride

Set AllowOverride None por defecto "de su sistema de ficheros. De lo contrario, para una URL dada a la

traducción de rutas, Apache intentará detectar un archivo. Htaccess en cada nivel de directorio de la ruta

dada.

<Directory />
AllowOverride None
</Directory>

ExtendedStatus
Si se incluye mod_status, asegúrese de que la Directiva "ExtendedStatus 'se establece en' Off '. De lo

contrario, Apache cuestión de tiempo extra varias llamadas al sistema correspondiente en cada solicitud

presentada.

ExtendedStatus Off

Tiempo de espera

Reducir la cantidad de tiempo que el servidor esperará antes de fallar una solicitud.

Timeout 45

Otros / específicos

Todas las páginas de cache de PHP, utilizando Squid, y / o un acelerador de PHP y la aplicación del

codificador, como APC. También eche un vistazo a mod_cache en Apache 2.2.

Convertir / pre-render todas las páginas PHP que no cambian la solicitud a petición suya, a páginas HTML

estáticas. Usar wget 'o' HTTrack "para rastrear su sitio y realizar esta tarea de forma automática.

Pre-comprimir el contenido y pre-generar encabezados de páginas estáticas; send-as-está utilizando

mod_asis. Puede usar 'wget' o 'HTTrack' para esta tarea. Asegúrese de establecer el nivel de compresión

zlib en un valor alto (6-9). Esto tendrá una cantidad considerable de la carga del servidor.

Búfer de salida en virtud de uso de PHP para generar la producción y atender las solicitudes sin pausas.

Evitar la negociación de contenido para los tiempos de respuesta más rápido.

Asegúrese de que los archivos de registro están en rotación. Apache no manejará grandes (2GB +) de

archivos muy bien.

Obtenga una gran mejora del rendimiento mediante el uso de caché de sesión SSL.

Externalizar sus imágenes a simple Amazon Storage Service (S3).

Medición de rendimiento del servidor Web

Pruebas de carga

Apache HTTP serverherramienta de evaluación comparativa


httperf
El Molino, una carga de Java Marco de pruebas

Puntos de referencia

He buscado ampliamente para Apache, lighttpd, Tux, y otros puntos de referencia servidor web.

Lamentablemente, único de referencia casi todos los que pude localizar parecía haber sido realizado por

completo sin pensar, o con un sesgo grande.


No confíe en los puntos de referencia a disposición, especialmente los realizados con la herramienta 'ab'.

La única manera de obtener un informe válido es el punto de referencia para llevar a cabo usted mismo.

Para obtener resultados válidos, nota a la prueba en un sistema con recursos limitados, y el máximo de

recursos. Pero lo más importante, configurar cada aplicación de servidor httpd para la situación

específica.

Información

Você também pode gostar