Optimizando al maximo Apache

Iniciado por ANTRAX, Diciembre 11, 2014, 08:02:03 AM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.


Esta es una recopilación de configuraciones para mejorar el rendimiento de sus servidores Apache

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta:
Ésta es una de las directivas más importantes, pues determina el número máximo de peticiones simultáneas que Apache puede atender. La idea es no permitir más conexiones de las que se pueden atender, para evitar usar swap, lo cual disminuye en mucho el rendimiento global. Las peticiones que no se puedan atender se pondrán en cola, según el valor de la directiva ListenBacklog. Se explica cómo se calcula éste número (de forma aproximada) en la documentación oficial, pero se entiende mejor de la fórmula de No tienes permitido ver los links. Registrarse o Entrar a mi cuenta:

Código: text
MaxClients ≈ (RAM - size_all_other_processes)/(size_apache_process)



RAM: se puede usar "free -m" para ver la ram total en MB, o cat /proc/meminfo, entre otras.

size_apache_process: Se podrá calcular el tamaño de un proceso httpd con "ps -ylC httpd --sort:rss", el cual mostrará todos los procesos httpd en ejecución, de menor a mayor tamaño, en bytes, para la columna RSS (Resident Set Size: "la memoria no-swap que ha usado, en KB" ). Se podrá ver el tamaño mayor (dividido entre 1024 para tenerlo en MB) como "size_apache_process", o siendo menos severos, usa la siguiente fórmula, la cual calcula la media de los procesos actuales de Apache, ya en MB:

Código: text
ps -ylC httpd --sort:rss | awk '{SUM += $8; I += 1} END {print SUM/I/1024}'



size_all_other_processes: Siguiendo la regla anterior, se podrá ver el uso de memoria por los procesos que no sean de Apache, con la fórmula descrita a continuación, la cual ya devolverá el resultado en MB:

Código: text
ps -N -ylC httpd --sort:rss | awk '{SUM += $8} END {print SUM/1024}'



Así por ejemplo:

Código: text
free -m = 999MB (Mem total)
ps -ylC httpd --sort:rss | awk '{SUM += $8; I += 1} END {print SUM/I/1024}' = 20.5458 (de 10880 a 34084)
ps -N -ylC httpd --sort:rss | awk '{SUM += $8} END {print SUM/1024}' = 343.441
Max_Clients = (999 - 343.441) / 20.5458 = 31,9 => 31 (aproximado)



No tienes permitido ver los links. Registrarse o Entrar a mi cuenta:
Aquí se debe especificar un listado de páginas que resolverán como índices, indicando como primera opción la opción más probable. Por ejemplo, en un servidor PHP donde el index suela ser un archivo del estilo index.php especificaremos:

Código: text
DirectoryIndex index.php index.html



De esta manera, se aceptarán archivos llamados index.php e index.html como archivos que se mostrarán cuando se hace una petición a un dominio sin indicar el fichero que se quiere ver (que es lo habitual).

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta:
Para un mayor rendimiento, deberíamos indicar de forma global, y en todos los virtualhost, "AllowOverride None", para evitar que a cada petición, busque si existe o no un fichero .htaccess en los directorios de la petición (Ej. para un DocumentRoot /var/www, buscará un.htacess en /, otro en /var y otro en /var/www). Por contra, no podremos usar archivos .htaccess en aquellos virtualhost que hayamos configurado así.

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta:
Para evitar llamadas extra en cada petición, se deberá configurar para cada "Directory" de cada VirtualHost, lo siguiente:

Código: text
'Options +FollowSymLinks -SymLinksIfOwnerMatch'



No tienes permitido ver los links. Registrarse o Entrar a mi cuenta:
Esta directiva ya viene en las versiones superiores a Apache 1.3, en Off por defecto, y previene así aumentar la latencia de las peticiones HTTP por culpa de la resolución DNS. Si no lo está ya, se recomienda ponerla a Off.
Módulos de Multi-Procesamiento (MPM)

Apache "viene con una serie de Módulos de Multi-Procesamiento que son los responsables de conectar con los puertos de red de la máquina, aceptar las peticiones, y generar los procesos hijo que se encargan de servirlas".
Básicamente:

Worker: usa múltiples procesos hijos, con múltiples threads cada uno. Cada thread gestiona una conexión a la vez. Generalmente, se recomienda en entornos de alto tráfico.
Prefork: usa múltiples procesos hijos, con un único thread cada uno. Cada proceso gestiona una conexión a la vez. Puede trabajar con módulos de terceros.

AQUI más información sobre estos MPM. Por cierto, se puede ver con qué MPM estamos trabajando, ejecutando la siguiente línea, lo cual nos devolverá, entre otros, prefork.c o worker.c:

Código: text
/usr/sbin/apachectl -l



APC
Si se quiere mejorar el rendimiento de un servidor web, PHP, una muy buena opción es instalarle APC, una caché que optimiza el código PHP intermedio y mejora notablemente el rendimiento del servidor. Sin duda, una utilidad que debería estar instalada en prácticamente cualquier servidor Apache/PHP, ya que tiene una instalación muy sencilla (se encuentra en yum) y efectos notables en el rendimiento.


Nice, para marcadores... me gusta mucho el (m)apache aunque siempre me dicen que nginx es "mucho mejor" y mas configurable respecto a rendimiento y esas cosas... será revisar esto, ponerlo a prueba y alguuun dia probar el nginx xD

Saludos

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Acepta con humildad y aprecio que en la vida la muerte es inevitable y amarás ésta, adorando la muerte

Pronto escribiré algun articulo sobre Nginx.
En underc0de de hecho lo usamos por recomendación de gn0m3 y la diferencia es muy notable!

Saludos!
ANTRAX