Escolar Documentos
Profissional Documentos
Cultura Documentos
Artículos DeveloperSide.NET
Advertencia:
"La optimización prematura es la raíz de todo mal". - Donald Knuth.
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
RAM
El mayor problema que afecta al rendimiento del servidor web es la memoria RAM. Tienen tanta RAM
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.
CPU y el enlace de red. Tenga en cuenta que un solo PII 400 Mhz con 128-256 megas de RAM puede
Seleccione MPM
de los trabajadores:
Configurar MPM
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
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
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
Utilice ps '-httpd ylc - tipo: rss' para encontrar el tamaño proceso. Divide el número por 1024 para
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
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
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 ...
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
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
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
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.
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].
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
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:
Tenga en cuenta que los ajustes de configuración será muy diferente entre un servidor de contenido
mod_deflate
Reducir el ancho de banda en un 75% y mejorar el tiempo de respuesta mediante el uso de mod_deflate.
Módulos cargados
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
MPM prefork:
KeepAlive On
KeepAliveTimeout 2
MaxKeepAliveRequests 80
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
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
<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
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.
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.
Asegúrese de que los archivos de registro están en rotación. Apache no manejará grandes (2GB +) de
Obtenga una gran mejora del rendimiento mediante el uso de caché de sesión SSL.
Pruebas de carga
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
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