OVH Community, your new community space.

Como configurar Apache


hawork
24/08/2010, 16:51
Soy un fiel seguidor de los foros aunque nunca hablo mucho y aprovechando que he voy a usar mucho este how-to quiero dar las gracias a kennysamuerto, power y demás grandes colaboradores.

Relmente estos posts ayudan a muchísima gente, no sólo la que responde xD

Power
29/05/2010, 19:05
Hola,
Cita Publicado inicialmente por Arturoap
:P, disculpa la expresión, me refiero, para poner el KeepAlive Off, ¿Cómo lo hago? ¿Qué modifico?
Pues buscas KeepAlive en el fichero httpd.conf y lo pones a tu gusto.

Saludos

Arturoap
29/05/2010, 18:52
:P, disculpa la expresión, me refiero, para poner el KeepAlive Off, ¿Cómo lo hago? ¿Qué modifico?


Muchas gracias!

Power
29/05/2010, 18:43
Hola Arturoap,

Conozco otra forma de hacerlo desde el WHM:
Service Configuration -> Apache Configuration -> Include Editor
Ahí podrías poner las directivas que quisieras en httpd.conf
Y WHM se encargaría de comprobarlas y de guardarlas.

Pero nunca lo he probado.

Saludos

Power
29/05/2010, 18:37
Hola,
Cita Publicado inicialmente por Arturoap
Debe ser que hoy no es mi día o algo, pero estoy ahí buscando la opción y no la encuentro :S
Cómo se llama?
No te pillo qué quieres decir con "la opción".
Yo edito el fichero, modifico lo que me interesa, ejecuto esos dos comandos y listo.

Saludos

Arturoap
29/05/2010, 14:29
Cita Publicado inicialmente por Power
Hola,


Hay varias formas de hacerlo.
Yo edito /usr/local/apache/conf/httpd.conf
(Haciendo antes una copia ... por si acaso).
Y después sigo las instrucciones de http://docs.cpanel.net/twiki/bin/vie...nfig_Distiller
(Que son las que también aparecen en la cabecera del fichero).

Saludos
PD: Por supuesto, no hace falta recompilar Apache.
Debe ser que hoy no es mi día o algo, pero estoy ahí buscando la opción y no la encuentro :S

Cómo se llama?


Saludso

Power
29/05/2010, 13:56
Hola,
Cita Publicado inicialmente por Arturoap
¿Cómo veo esta configuración?

Se cambia desde easyapache? Hay que recompilar apache manualmente?
Hay varias formas de hacerlo.
Yo edito /usr/local/apache/conf/httpd.conf
(Haciendo antes una copia ... por si acaso).
Y después sigo las instrucciones de http://docs.cpanel.net/twiki/bin/vie...nfig_Distiller
(Que son las que también aparecen en la cabecera del fichero).

Saludos
PD: Por supuesto, no hace falta recompilar Apache.

Arturoap
29/05/2010, 13:20
Cita Publicado inicialmente por Power
Hola,

Tenía problemas de saturación del servidor a determinadas horas que había muchas conexiones web.

He seguido este how-to y he configurado Apache como es debido.
Y ahora va todo de cine.

Muchas gracias Kennysamuerto, y resto de foreros.

Saludos
PD: Comprobado: con KeepAlive Off mucho mejor, sobre todo cuando hay muchas conexiones.
Hola!

¿Cómo veo esta configuración?

Se cambia desde easyapache? Hay que recompilar apache manualmente?


Saludos!

Power
29/05/2010, 09:16
Hola,

Muchísimas gracias, Kennysamuerto, por esta detallada explicación.
Creo que ya lo he entendido mucho mejor.

Saludos

kennysamuerto
29/05/2010, 01:41
Cita Publicado inicialmente por Power
Hola,


Kennysamuerto, por favor, ¿podrías explicar, de forma más concreta, en qué casos podría ser interesante tenerlo activado y qué ventajas se obtendría de ello?.
(Perdona, pero soy bastante pardillo en tema de servidores web y unos ejemplos me aclararían mucho).
Gracias anticipadas.

Saludos
Hola Power,

Tengo un cliente, que es mas, es forero y espero que no le importe que hable de su caso, que es una pagina de futbol online.

Es una pagina que los momentos de partido, tiene muchisimas visitas y conexiones recurrentes.

En cambio, en otros momentos, la pagina esta "semi" vacia, y el servidor no tiene cargas.

Bien, para esta pagina, lo ideal es tenerlo activo y desactivado. Me explico.

En los momentos donde no hay partidos, entre semana por ejemplo, seria inutil mantenerlo activo, porque mucha gente entra, mira los partidos de hoy, se va. El servidor mantiene la conexion por si vuelve o se conecta a otra pagina. Pero ese usuario no va a volver en el tiempo determinado por el KeepAlive. Por lo que esta generando un desgaste innecesario.

En cambio, en momentos de partidos, donde entran muchisimos usuarios, es ideal mantenerlo activo. El servidor ira mas lento, pero al menos no sufrira un riesgo de caida. mantendra la conexion, y cuando el usuario cambie de pagina, la tendra activa, no haciendo sufrir al servidor.

Por ejemplo, un foro seria un caso, de tener muchas visitas, donde podria estar activo. Si hablamos como foro, una pagina donde no tiene ningun otro contenido. Es decir, que al acceder nos encontramos con un foro, donde sus usuarios estan constantemente metidos, posteando.

Si el servidor sufre, es ideal ponerlo en ON. Y ver su evolucion.

Serian algunos casos practicos donde poder activar o no el KeepAlive.

Como digo, para mi es el parametro que mas secretos guarda. Es decir, no hay un factor sobre el que guiarte, mas que la intuicion o un analisis previo de contenido.

Basicamente, se resumiria en "Mantener viva" la conexion. Si podemos analizar el contenido, y creemos que un usuario va a entrar en periodos cortos de tiempo creando conexiones, hay que activarlo. Manteniendola viva, lo que hacemos es evitar la sobrecarga del servidor.

Si un sitio el usuario entra y sale y solo crea una conexion, o la crea cada X tiempo largo, no es necesario "mantener viva" dicha conexion, porque sera mas problema la solucion, que el propio problema en si.

Espero haberme explicado, pero como digo, es el parametro mas complicado de explicar, ya que se basa puramente en la intuicion de como funciona un sitio.

Hay algunos factores que podemos analizar para poder determinar On o Off en base a lo que nos digan monitorings o logs, pero ya os digo que es tremendamente complicado llegar a una conclusion por estos, y tampoco, o no siempre, es fiel a sus principios, ya que como comento en el primer caso, la web de futbol online, nos fallaria, por unos o por otros.

Por lo que lo mejor es analizar contenido, e intuir.

Saludos

Power
28/05/2010, 23:13
Hola,
Cita Publicado inicialmente por kennysamuerto
Logico.

Pero un sitio que tiene visitas que no son recurrentes, no tiene mucho sentido tenerlo activo.

Entonces cada cual debe de saber como son sus visitas, para aplicar el parametro a On o Off.
Kennysamuerto, por favor, ¿podrías explicar, de forma más concreta, en qué casos podría ser interesante tenerlo activado y qué ventajas se obtendría de ello?.
(Perdona, pero soy bastante pardillo en tema de servidores web y unos ejemplos me aclararían mucho).
Gracias anticipadas.

Saludos

kennysamuerto
28/05/2010, 21:33
Cita Publicado inicialmente por nadeu
El KeepAlive es mas para conexiones persistentes.

Saludos,
Pau.
Logico.

Pero un sitio que tiene visitas que no son recurrentes, no tiene mucho sentido tenerlo activo.

Entonces cada cual debe de saber como son sus visitas, para aplicar el parametro a On o Off.

nadeu
28/05/2010, 16:22
El KeepAlive es mas para conexiones persistentes.

Saludos,
Pau.

kennysamuerto
26/05/2010, 19:15
Si, en tu caso Power esta bastante claro que el KeepAlive tiene que ir en Off.

El KeepAlive es el parametro que menos me gusta tocar en apache. Yo tambien soy muy de Off. No es un parametro que puedas definir mediante una ecuacion o mediante datos. Lo tienes que decidir en funcion de las paginas que tengas, y el comportamiento de estas.

Pero por lo visto en la grafica... no queda lugar a la duda.

Un Saludo

Power
26/05/2010, 16:30
Hola,

Mirad la gráfica:
http://lh5.ggpht.com/__HFxPm2-o6w/S_...sos_apache.png

Esta es una gráfica de ayer a las 18:00h (valores del extremo de la derecha) con KeepAlive Off.
(Cambié a KeepAlive Off a las 10:30h)
Comparad los valores con los del día anterior a las 18:00h (parte izquierda) con KeepAlive On.

Con KeepAlive On, cuando había muchos accesos, se me quedaban muchas conexiones abiertas y se me saturaba el número de servidores arrancados (tengo un MaxClients de 75) y se colapsaba el servidor.

Ahora, con KeepAlive Off va como la seda y apenas consume recursos. ¡¡¡ Otro mundo !!!

Saludos
http://foros.ovh.es/%3Ctable%20style...3E%3C/table%3E

kennysamuerto
26/05/2010, 15:58
Tiene sus ventajas tenerlo activado.

Si teneis algun proyecto con muchas visitas en un minuto determinado, esto pasa por ejemplo, en proyectos de webs deportivas, que los eventos empiezan a una hora, o terminan a una hora, y la gente suele conectarse en manada, es bueno tenerlo activado para controlar.

Si no estubiera activado, el servidor se colapsaria.

Es decir, tiene su parte positiva, y su parte negativa. Por eso, ese parametro, es lo que cada cual crea que tiene que hacer.

Diablo48
26/05/2010, 10:56
Cita Publicado inicialmente por Power
Hola,

Tenía problemas de saturación del servidor a determinadas horas que había muchas conexiones web.

He seguido este how-to y he configurado Apache como es debido.
Y ahora va todo de cine.

Muchas gracias Kennysamuerto, y resto de foreros.

Saludos
PD: Comprobado: con KeepAlive Off mucho mejor, sobre todo cuando hay muchas conexiones.
Yo la verdad nose si es que configuro mal el keepalive o que, pero con el desactivado me va como un tiro, con el activado, va mucho peor.

Power
25/05/2010, 19:46
Hola,

Tenía problemas de saturación del servidor a determinadas horas que había muchas conexiones web.

He seguido este how-to y he configurado Apache como es debido.
Y ahora va todo de cine.

Muchas gracias Kennysamuerto, y resto de foreros.

Saludos
PD: Comprobado: con KeepAlive Off mucho mejor, sobre todo cuando hay muchas conexiones.

Diablo48
25/04/2010, 13:44
Bueno siento relanzar el post, pero estoy intentando reconfigurar un servidor con Centos y cpanel y nose si es que me falta algun paquete para que httpd sea reconocido como comando o que simplemente no esta el comando en el path pero no me reconoce httpd para el paso 1 de ver la version y modulos que tiene el apache, como puedo hacer?

MarcosBL
29/12/2009, 15:39
es que no ha logrado servir ni esas

apr_poll: The timeout specified has expired (70007)
Total of 104 requests completed

Sigue bajando,

./ab -n 100 -c 10 http://www.miurl.com/
a ver asi

radge
29/12/2009, 09:35
Ok he probado con esto

r29997 bin # ./ab -n 500 -c 30 http://www.miurl.com/
This is ApacheBench, Version 2.0.41-dev <$Revision: 1.121.2.12 $> apache-2.0
Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright (c) 2006 The Apache Software Foundation, http://www.apache.org/

Benchmarking http://www.miurl.com/ (be patient)
Completed 100 requests
apr_poll: The timeout specified has expired (70007)
Total of 104 requests completed

No da ningun log ? o similar ? Con estos resultados que interpreto ?

salu2 radge

MarcosBL
28/12/2009, 21:31
Prueba con valores un poco más "conservadores" y vete subiendo poco a poco, creo que se le está "indigestando" tanta petición :-D

./ab -n 1000 -c 30 http://www.miurl.com/

radge
28/12/2009, 21:20
Yo lo acabo de ejecutar y el resultado es este.. se queda en algun log o algo ?

r29997 bin # ./ab -n 10000 -c 1000 http://www.miurl.com/
This is ApacheBench, Version 2.0.41-dev <$Revision: 1.121.2.12 $> apache-2.0
Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright (c) 2006 The Apache Software Foundation, http://www.apache.org/

Benchmarking www.miurl.com (be patient)
apr_poll: The timeout specified has expired (70007)
Total of 6 requests completed

rXXXXX bin #

MarcosBL
28/12/2009, 20:55
Te vas a reir, pero simplemente te falta una / al final ;-)

En vez de

./ab -n 10000 -c 1000 http://www.web.com
poner

./ab -n 10000 -c 1000 http://www.web.com/

radge
28/12/2009, 17:16
Cita Publicado inicialmente por Power
Hola,



Posiblemente lo tengas en /usr/local/apache/bin/ab

Saludos


Tenias razón de todas formas.. algo hago mal


r29997 bin # ./ab -n 10000 -c 1000 http://www.web.com
./ab: invalid URL
Usage: ./ab [options] [http://]hostname[ort]/path
Options are:
-n requests Number of requests to perform
-c concurrency Number of multiple requests to make
-t timelimit Seconds to max. wait for responses
-p postfile File containing data to POST
-T content-type Content-type header for POSTing
-v verbosity How much troubleshooting info to print
-w Print out results in HTML tables
-i Use HEAD instead of GET
-x attributes String to insert as table attributes
-y attributes String to insert as tr attributes
-z attributes String to insert as td or th attributes
-C attribute Add cookie, eg. 'Apache=1234. (repeatable)
-H attribute Add Arbitrary header line, eg. 'Accept-Encoding: gzip'
Inserted after all normal header lines. (repeatable)
-A attribute Add Basic WWW Authentication, the attributes
are a colon separated username and password.
-P attribute Add Basic Proxy Authentication, the attributes
are a colon separated username and password.
-X proxyort Proxyserver and port number to use
-V Print version number and exit
-k Use HTTP KeepAlive feature
-d Do not show percentiles served table.
-S Do not show confidence estimators and warnings.
-g filename Output collected data to gnuplot format file.
-e filename Output CSV file with percentages served
-h Display usage information (this message)

Power
26/12/2009, 20:08
Hola,

Cita Publicado inicialmente por radge
Me he quedado en esta linia

ab -n 10000 -c 1000 http://example.com/

El comando ab no lo encuentra mi s.o.

salu2 radge
Posiblemente lo tengas en /usr/local/apache/bin/ab

Saludos

radge
26/12/2009, 11:16
Me he quedado en esta linia

ab -n 10000 -c 1000 http://example.com/

El comando ab no lo encuentra mi s.o.

salu2 radge

PerroVerd
05/12/2009, 02:25
Lo de que en la línea del ps te salga más de un proceso es lo lógico. En el ejemplo de kennysamuerto sólo pone una línea para facilitar la lectura.

De los procesos de apache hay uno que se ejecuta como root y el resto que se ejecutan con el usuario que tengamos definido, es en estos últimos en los que nos tenemos que fijar para sacar el valor de RSS

Yo tomo el valor máximo de RSS, por lo de ser conservador y tal, pero se puede hacer la media de todos los valores.

Por cierto para máquinas debianitas y derivadas hay que hacer el ps con apache2 ya que no utiliza el nombre httpd

ps -ylC apache2 --sort:rss

USStrat
04/12/2009, 11:35
Muchas gracias como siempre kenny!

Oye solo una duda:

si ps -ylC httpd --sort:rss
me arroja... en vez de una línea como en tu ejemplo, esto:
Código:
S   UID   PID  PPID  C PRI  NI   RSS    SZ WCHAN  TTY          TIME CMD
S    48  9487  9485  0  80   0  6944 59613 226881 ?        00:00:00 httpd
S    48  9597  9485  0  80   0 11776 83178 semtim ?        00:00:00 httpd
S    48  9601  9485  0  80   0 11776 83178 semtim ?        00:00:00 httpd
S    48  9594  9485  0  80   0 11780 83178 semtim ?        00:00:00 httpd
S    48  9595  9485  0  80   0 11780 83178 semtim ?        00:00:00 httpd
S    48  9608  9485  0  80   0 11780 83178 semtim ?        00:00:00 httpd
S    48  9507  9485  0  80   0 11792 83178 semtim ?        00:00:00 httpd
S    48  9600  9485  0  80   0 11792 83178 semtim ?        00:00:00 httpd
S    48  9596  9485  0  80   0 11808 83178 semtim ?        00:00:00 httpd
S    48  9504  9485  0  80   0 11812 83178 semtim ?        00:00:00 httpd
S    48  9524  9485  0  80   0 11848 83178 -      ?        00:00:00 httpd
S    48  9605  9485  0  80   0 13792 97193 semtim ?        00:00:00 httpd
S    48  9603  9485  0  80   0 14040 97337 semtim ?        00:00:00 httpd
S    48  9604  9485  0  80   0 14060 97257 semtim ?        00:00:00 httpd
S    48  9529  9485  0  80   0 14080 97337 semtim ?        00:00:00 httpd
S    48  9514  9485  0  80   0 14088 97337 semtim ?        00:00:00 httpd
S    48  9502  9485  0  80   0 14104 97337 semtim ?        00:00:00 httpd
S    48  9598  9485  0  80   0 14200 97321 semtim ?        00:00:00 httpd
S    48  9607  9485  0  80   0 15220 97502 semtim ?        00:00:00 httpd
S    48  9493  9485  0  80   0 15240 97502 semtim ?        00:00:00 httpd
S    48  9509  9485  0  80   0 15256 97502 semtim ?        00:00:00 httpd
S     0  9485     1  0  80   0 17056 83145 -      ?        00:00:00 httpd
¿ a qué se debe? y acabo de reiniciar apache!

Malaparte
04/12/2009, 10:59
Excelente guía Kenny,

sólo corregir un detalle: MaxKeepAliveRequest es MaxKeepAliveRequests, te faltaba la S al final.

Como soy algo novato me gustaría que comentases cómo desactivar los módulos de Apache.

¡Esperamos ansiosos la parte de optimización!

Saludos,

Malaparte.

Power
13/11/2009, 16:21
Hola,

Superinstructivo todo lo relativo al cálculo de valores para optimizar nuestra configuración de Apache.

Esperamos más ... pero no hay prisa

Muchas gracias Kennysamuerto.
Cuando celebremos el encuentro de administradores con servidores en OVH, te debemos no una cervecita, sino un bidón de los gordos.

Saludos

kennysamuerto
13/11/2009, 16:13
Aun me queda bastante que explicar, por ejemplo, varias de las directivas se pueden sacar en base al rendimiento del servidor.

Poco a poco ire completando la guia, porque es muy extensa. Esto esto es lo que tenia ya.

Al que le corra prisa, tal como esta, solo necesita saber mas sobre los modulos. Una solucion "Chapucera" es ir desactivandolos uno por uno y reniciar apache en cada uno de ellos. Si no te da error, es que puede estar desactivado. Luego se hace una comprobacion en las webs de que todo funciona y listo.

Pero insisto, esto es muy chapucero. Recomiendo leer cuando los coloque para que sirve cada modulo, y en caso de necesitarlo o no, desactivarlo.

Prometo que poco a poco ire actualizando la guia, y cualquier recomendacion o mejora de la guia sera bienvenida.

Un Saludo

Power
13/11/2009, 10:49
Hola,

Utilísima guía.
Muchas gracias Kennysamuerto.

Saludos

kennysamuerto
13/11/2009, 02:07
Cita Publicado inicialmente por android
No va
Perdon:


ps -ylC httpd --sort:rss

Asi si.

android
13/11/2009, 01:42
Para calcular esto ultimo:

Calcular memoria consumida por Apache

# ps -ylC httpd –sort:rss
No va

kennysamuerto
12/11/2009, 16:57
Bueno, es basico para un servidor dedicado el tener configurado bien Apache (httpd). Tened en cuenta que una mala configuracion del mismo, puede derivar en que un dedicado funcione muy mal, cuando la realidad esque puede funcionar perfecto.

CONOCER LA VERSION DE APACHE

Hay muchas maneras pero dejamos dos simples. Es necesario por motivos obvios, conocer la versión de apache instalada en nuestro sistema y el modo en el que ha sido compilado.

# httpd -v

Output:

-bash-3.1# Server version: Apache/2.2.3
-bash-3.1# Server built: Jan 15 2008 20:33:30

# httpd -l

Compiled in modules:

core.c
prefork.c
http_core.c
mod_so.c

De esta manera sabemos que estamos ante un servidor Apache / 2.2.3 y en modo prefork.

Prefork MPM: el modo prefork utiliza múltiples procesos hijo, cada proceso hijo se ocupa de una conexión a la vez. Prefork es muy adecuado para sistemas con doble CPU, la velocidad es comparable al del Worker MPM y es altamente tolerante con los fallos en los módulos y los procesos hijos colgados. Por contra, el uso de memoria es alto y cuanto más tráfico tenemos más memoria consume- Vamos, que lo usaremos siempre que tengamos una buena CPU, y como minimo 1 GB de Memoria RAM. Suele ser recomendable para PHP.

Worker MPM: utiliza múltiples procesos hijo. Es multi-thread dentro de cada proceso hijo y cada thread se encarga de una conexión. Worker es más rápido y escalable y el uso de memoria es comparativamente bajo. Es también adecuado para múltiples procesadores. Worker es menos tolerante ante fallos de módulos y un fallo en un thread puede afectar a todos los threads de un proceso hijo. Por lo que sera ideal usarlo para servidores con poca RAM, siempre y cuando tengamos en cuenta, que debemos usar pocos modulos tambien.

DIRECTIVAS DE APACHE

Timeout - Es el valor que una conexion inactiva va a estar mantenida por el Servidor. Por defecto es 300 (segundos). Para mi es demasiado. Hay que tener en cuenta, que ademas, reducir estos segundos, nos va a beneficiar en casi todos los sentidos. Por lo tanto, mi recomendacion es que sea entre 40-50. Suelo usar 30.

KeepAlive - Son conexiones que se quedan abiertas para un cliente en la comunicacion con el servidor (Usuario entra en la web, web sirve pagina, y la conexion queda abierta para cuando vuelva usuario, seria un ejemplo chapucero). De esta forma, la reaprovecha. Es ideal para paginas donde existen unos usuarios fijos. Ademas, se puede configurar para determinar opciones (ahora las explicamos). Se configura con el On/Off. Personalmente, a mi siempre me ha ido mejor Off.

KeepAliveTimeout - Es la regulacion del tiempo que mantiene abierto el servidor la conexion, a la espera de mas peticiones. Por ejemplo, si le colocamos 15, el servidor esperara 15 segundos antes de cerrar la peticion, a la espera de que el usuario realice otra.Yo recomendaria que se bajaran esos 15 segundos. Lo dejaria en 2 o 3 maximo.

MaxKeepAliveRequest - Numero maximo de peticiones permitidas por conexion. Sinceramente, yo esto lo pondria sobre el 1000. No creo que nunca exceda ese numero, y teniendo en cuenta que si en 2 o 3 segundos como hemos configurado arriba, no existe conexion, se cerraria. Pero depende de como lo tome el servidor.

En estos momentos, es cuando tenemos que elegir que modulo vamos a ejecutar. Para ello, yo probaria primero con uno, y luego con otro si no lo tenemos claro. Y ejecutaria una prueba de Apache Benchmarking.

Es tan sencillo como:

ab -n 10000 -c 1000 http://example.com/

Y dependiendo de los resultados que nos de (Es importante saber el tiempo de respuesta de uno y otro, y tambien si llegan todas las peticiones, etc.) pues podemos elegir. Aunque generalmente, para PHP, es recomendable el prefork.

Luego, cada modulo, tiene unos valores, que vamos a describir:

- StartServers - Numero de procesos Iniciales. Mi experiencia me dice que un numero bajo puede ser importante a la hora del rendimiento. Yo por ejemplo suelo fijarlo en 5.

- MinSpareServers - Numero de procesos minimos en espera. Suelo recomendar una cifra entre 3 y 10.

- MaxSpareServers - Numero de procesos maximos en espera. Es ideal que sea el doble que el Min.

- ServerLimit - Limite del servidor de clientes (suele ir ligado al MaxClients).

- MaxClients - Este elemento es importante. Es el número total de procesos hijo httpd que pueden ser procesados simultáneamente. El valor por defecto es bastante elevado para la mayoría de servidores (256). Lo fundamental para entender como gestionar la directiva MaxClients, es comprender que puede tener un valor “alto” sino nuestro servidor está sirviendo contenido estático, pero con aplicaciones modernas tipo PHP de contenido dinámico, podemos tener graves problemas de estabilidad si no calculamos bien el número total de MaxClients. Una fórmula para calcular el valor apropiado del MaxClients sería (hay muchas) la siguiente:
MaxClients = Total RAM dedicated to the web server / Max child process size
O lo que es lo mismo, la Ram que tenemos en MB/ MB en Procesos Apache.

Para calcular esto ultimo:

Calcular memoria consumida por Apache

# ps -ylC httpd --sort:rss

–sort rss (lista ordenando por RSS(Resident Set Size), kb del proceso en memoria)

Output:

# S 48 5674 17426 0 75 0 2904 2637 277588 ? 00:00:00 httpd

2904 / 1024 = 2,8 MB ocupados por proceso de Apache. Ahora, debemos saber el número total de procesos:

# lsof -i | grep httpd | grep ESTABLISHED | wc -l

Output:

# 15

De este modo, tenemos que por proceso utilizamos 2,8 MB de memoria (no swap). Y sabemos que hay 15 procesos de apache en memoria, con lo cual 2,8 MB x 15 = 42 MB usados.

- MaxRequestsPerChild - Cuando un proceso excede este valor, el proceso es destruido y, si es necesario, un nuevo proceso lo reemplaza. Esto puede reducir la memoria total usada en muchas situaciones, con los archivos dinámicos incrementando constantemente su uso de RAM y reiniciando los procesos para reducir su uso. Por lo que se recomienda un valor alto (10000 por ejemplo).

Tras realizar todo esto, pasamos a optimizar.

OPTIMIZACION

No hablaremos de optimización totalmente pero, si comentaremos que una de las cosas que se recomiendan por toda la comunidad es deshabilitar los módulos de apache que no necesitemos. En el ejemplo que me ocupa, una máquina virtual de 1GB de RAM de OpenVZ, deshabilitamos de 52 procesos 35, dejando sólo activos 17. Volvimos a hacer el calculo de la memoria utilizada por apache entonces:

2,3 MB por proceso x 12 procesos = 33,6 MB! (22 % menos en memoria). No está mal.

Otro consejo que se da en todos los manuales de tunning de Apache, es el deshabilitar la resolución de DNS, HostnameLookups. Esta directiva intenta resolver cada IP conectada a tu servidor y eso genera un consumo de recursos innecesario.

(EDITARE ESTE TROZO REALIZANDO UNA EXPLICACION DE CADA MODULO DE APACHE)

Intentare editar este post con mas cosas. Es posible que algo este equivocado o desactualizado, porque esta guia es personal y tiene algun tiempo.

Un Saludo