A introduction about apache, how can up performance of your Apache making some little things. You can make some changes about parameters and configurations, and get two time the performance your server.
2. Pasos a seguir
[1] PREFIX hay que reemplazarlo por la ruta en la que se va a instalar
Apache. Si no especifica ningún valor en PREFIX, el valor por defecto que se
toma es /usr/local/apache2
5. Apache Tuning
1. Cargar sólo los módulos necesarios
2. Usar los módulos de multiprocessing apropiados
3. DNS lookup
4. Cambiando parametros
i. MaxClients
ii. MinSpareServers, MaxSpareServers, y StartServers
iii. MaxRequestsPerChild
iv. KeepAlive y KeepAliveTimeout
v. Prueba de rendimiento
5. Compresión HTTP y caching
6. Separar el contenido dinámico y el estático
6. Apache Tuning
1. [Cargar sólo los módulos necesarios]
2. Usar los módulos de multiprocessing apropiados
3. DNS lookup
4. Cambiando parametros
i. MaxClients
ii. MinSpareServers, MaxSpareServers, y StartServers
iii. MaxRequestsPerChild
iv. KeepAlive y KeepAliveTimeout
v. Prueba de rendimiento
5. Compresión HTTP y caching
6. Separar el contenido dinámico y el estático
7. 1.Cargar solo modulos
necesarios
● apachectl -M -> Lista los módulos corriendo en
Apache
● a2dismod/a2enmod <nombre modulo> ->
Desactiva/activa el módulo en cuestión
● apachectl configtest -> Testea que el módulo
desactivado no ha afectado a la conf de Apache
antes de relanzarlo.
Algunos de los módulos que suelen desactivarse [3]
8. Apache Tuning
1. Cargar sólo los módulos necesarios
2. [Usar los módulos de multiprocessing apropiados]
3. DNS lookup
4. Cambiando parametros
i. MaxClients
ii. MinSpareServers, MaxSpareServers, y StartServers
iii. MaxRequestsPerChild
iv. KeepAlive y KeepAliveTimeout
v. Prueba de rendimiento
5. Compresión HTTP y caching
6. Separar el contenido dinámico y el estático
9. 2. Usar los módulos de multiprocessing
apropiados
Cada proceso que genera varios
procesos hijos, estos son agrupados
y permiten usar la misma conexión.
Apache inicia varios subprocesos y
cada petición es atendida por uno de
estos.
10. Worker vs Prefork
● Más estable, ya que un error crítico
solo afectaría a una petición.
● Se pueden usar módulos / extensiones
que no sean Thread-Safe.
● Requiere más recursos para atender
peticiones simultáneas
● Favorece el uso intensivo de PHP. Los
aceleradores de PHP no son Thread-
Safe, pueden usarse.
● Prefork es la configuración
predeterminada en la mayoría de
instalaciones.
● Un fallo crítico afecta a varias
peticiones.
● Requiere que todos los
módulos/extensiones que se
vayan a usar sean Thread-Safe.
● Menos recursos para atender
peticiones simultáneas.
● No se pueden usar
aceleradores de PHP.
● Worker solo está disponible
desde Apache 2.x .
11. Worker vs Prefork
Prefork en
● Un servidor bastante
poderoso
● Manejando casi solo
contenido generado desde
PHP.
● El contenido estático se sirve
desde otro servidor.
Worker en
● Un servidor sencillo
● Más que todo contenido
estático.
● La mayoría del contenido
generado con PHP queda
almacenado en cachés.
12. Apache Tuning
1. Cargar sólo los módulos necesarios
2. Usar los módulos de multiprocessing apropiados
3. [DNS lookup]
4. Cambiando parametros
i. MaxClients
ii. MinSpareServers, MaxSpareServers, y StartServers
iii. MaxRequestsPerChild
iv. KeepAlive y KeepAliveTimeout
v. Prueba de rendimiento
5. Compresión HTTP y caching
6. Separar el contenido dinámico y el estático
13. 3. DNS lookup
Cada vez que hacemos una conexión
a un cliente,
Apache tiene que resolver el nombre
del cliente,
esto hace que tenga que hacer una
petición al DNS.
Apache tiene la posibilidad de
● crear una lista interna de hosts-ips
● logresolve
14. Apache Tuning
1. Cargar sólo los módulos necesarios
2. Usar los módulos de multiprocessing apropiados
3. DNS lookup
4. [Cambiando parametros]
i. MaxClients
ii. MinSpareServers, MaxSpareServers, y StartServers
iii. MaxRequestsPerChild
iv. KeepAlive y KeepAliveTimeout
v. Prueba de rendimiento
5. Compresión HTTP y caching
6. Separar el contenido dinámico y el estático
15. i. MaxClients
+ Timeouts
- RAM
MaxClients = Total RAM dedicated to the web server / Max child process size
- Timeouts
+ RAM
16. ii. MinSpareServers, MaxSpareServers, y
StartServers
● Estos parámetros condicionarán el multiprocesamiento de Apache
● No dejar muchos procesos en espera si la carga del servidor es baja.
18. iv.KeepAlive y KeepAliveTimeout
● Varias peticiones sobre la misma conexión TCP
● Timeout: Tiempo de espera hasta cerrar la conexión
● Destaca con HTML con muchas imágenes
19. v.Prueba de rendimiento
<IfModule prefork.c>
StartServers
3
MinSpareServers
2
MaxSpareServers 3
MaxClients 15
MaxRequestsPerChild
5000
</IfModule>
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 2
● Hemos usado prefork ya que
vamos a servir contenido
estático
● Al usar prefork,
establecemos el
MaxRequestPerChild
21. Apache Tuning
1. Cargar sólo los módulos necesarios
2. Usar los módulos de multiprocessing apropiados
3. DNS lookup
4. Cambiando parametros
i. MaxClients
ii. MinSpareServers, MaxSpareServers, y StartServers
iii. MaxRequestsPerChild
iv. KeepAlive y KeepAliveTimeout
v. Prueba de rendimiento
5. [Compresión HTTP y caching]
6. Separar el contenido dinámico y el estático
22. 5.Compresión HTTP y caching
+ Ancho de banda
+ Recursos necesarios
En apache se puede habilitar la compresión habilitando
el módulo mod_deflate.
Para configurar estos valores usamos mod_expires y
mod_headers.
24. Apache Tuning
1. Cargar sólo los módulos necesarios
2. Usar los módulos de multiprocessing apropiados
3. DNS lookup
4. Cambiando parametros
i. MaxClients
ii. MinSpareServers, MaxSpareServers, y StartServers
iii. MaxRequestsPerChild
iv. KeepAlive y KeepAliveTimeout
v. Prueba de rendimiento
5. Compresión HTTP y caching
6. [Separar el contenido dinámico y el estático]
25. 6. Separar el contenido dinámico y el
estático
Podemos usar estas lineas en nuestras directivas de VirtualHost
RewriteEngine On
RewriteRule “^/(.*).(jpg|jpeg|gif|png|swf|pdf|avi|mpeg|mpg|mp3)$”
“http://www.yourwebsite.com/$1.$2″ [P]
ProxyPassReverse / http://www.yourwebsite.com/
Esto lo podremos hacer
mediante los módulos
● mod_proxy
● rewrite_module
HTTP en su última versión, proporciona la posibilidad de establecer sesiones de mayor duración de manera que se permiten múltiples peticiones sobre la misma conexión TCP.
En según qué entornos interesará permitirlas, pero en otros entornos con muchas peticiones, esto incrementará el número de conexiones simultáneas impactando en el rendimiento, ya que las conexiones permanecerán abiertas más tiempo.