ispCP - Board - Support
Cada 3 dias tengo que reiniciar el server - Printable Version

+- ispCP - Board - Support (http://www.isp-control.net/forum)
+-- Forum: ispCP Omega International Area (/forum-22.html)
+--- Forum: Spanish Corner (/forum-29.html)
+--- Thread: Cada 3 dias tengo que reiniciar el server (/thread-13137.html)

Pages: 1 2


RE: Cada 3 dias tengo que reiniciar el server - kurgans - 03-29-2011 04:46 PM

Gracias Kilburn por el capote,


tal vez o yo no me explique lo suficientemente claro o tu no lo entendiste bien y fuiste directamente al grano de copiar/pegar sin leer bien el post

Quote:ese contenido bueno yo lo he variado ya bastante
Quote:va en funcion de como responde el servidor,
Quote:pero como punto de partida te servira
Quote:luego ya va en funcion otras cosas alterar esos valores

Eso es tu punto de partida para empezar a controlar el desmadre de procesos en el servidor, pero cada maquina es distinta, con un poco de ayuda en google de que hacen esos valores podras afinarlo bien.


RE: Cada 3 dias tengo que reiniciar el server - pleter - 04-02-2011 09:38 AM

(03-29-2011 01:55 PM)kilburn Wrote:  Esto pasa por copiar las cosas a saco sin entender lo que hacen.
..... texto restante.

aaaah, claro. en realidad nunca configure asi un vps y al ser mi primera vez tengo que pagar las consecuencias Wink jeje

en donde dices MaxProcessCount 1000 no soportara 1Gb de ram... como puedo sacar el calculo para configurar de que todo funcione optimo?
Busque un poco en google para informarme y muchos dicen de poner "35" y la verdad me parece un tanto "lejos" con referencia al que me paso kurgans.

Adjunto lo que encontre:
Code:
AddHandler fcgid-script .fcgi .php
# Where to look for the php.ini file?
DefaultInitEnv PHPRC  "/etc/php5/cgi"
# Where is the PHP executable
FCGIWrapper /usr/bin/php-cgi .php
# Maximum requests a process handles before it is terminated
MaxRequestsPerProcess 1500
# Maximum number of PHP processes.
MaxProcessCount       35
# Number of seconds of idle time before a process is terminated
IPCCommTimeout        240
IdleTimeout           240

# Large site
ServerLimit          2048
ThreadLimit           100
StartServers           10
MinSpareThreads        30
MaxSpareThreads       100
ThreadsPerChild        64
MaxClients           2048
MaxRequestsPerChild  5000
Fuente: http://www.socinfo.com/book/export/html/550
Donde tambien tiene de donde saco las fuente esa pagina, y no comprendo los calculos que usa para sacar los valores.

dato por si les sirve, por el momento estoy hosteando 8 dominios (por el momento) de los cuales 3 son blog y 6 foros (en dominio y subdominios) de los cuales en total, puedo tener unas 9.000 visitas diarias entre todos, pero poco a poco va creciendo y se me hace complicado estar todo el dia controlando para que no se "colapse"

Estos días el servidor no tubo problemas mayores y no se "cayo" como antes pasaba.. si se colapso un par de veces, pero lo solucione entrando en terminal como root y matando los procesos con:
Code:
# killall php5-cgi
entonces la memoria baja a 450mb y va como seda (bueno.. hasta que hago operacion pesadas en php con script de calculos y re-indexado en la base de datos que sibe a 900 y se estanca cerca de los 1000mb)

Gracias produndamente por todo los datos que me van tirando, voy haciendo todo lo que puedo a medida que me enseñan. gracias de verdad.


RE: Cada 3 dias tengo que reiniciar el server - kilburn - 04-02-2011 08:21 PM

Bueno bueno, vamos mejorando Smile

Para hacer los cálculos, el número de visitas en sí no es muy relevante. Tu servidor puede soportar hasta cierta carga, y evidentemente ese límite no depende del número de visitas que tengas sino del hardware en sí. Si después de configurarlo todo correctamente resultara que no tiene suficiente potencia para aguantar tu numero de visitas, tu unica opción será pasarte a un trasto más grande. Aún así, lo que debería pasar si llegas a ese umbral es que rechazara conexiones por sobrecarga, en vez de morirse agónica y silenciosamente como te pasaba antes.

En cuanto a los cálculos, parece que de base tu sistema usa unos 450mb de ram (es decir, con apache aguantando el mínimo número de threads que tienes configurado, y con todos los demás servicios chupando ram). Además, tienes 1Gb de ram en total que hoy en día es muy justito, nada cercano a "large site"...

Dicho esto, lo que deberías hacer primero es calcular cuanto te gasta cada nuevo proceso php. En mi opinión la mejor forma de hacerlo es mirar la memoria (free -m, los valores de la línea +/- buffer cache) justo después de hacer un "killall /usr/bin/php5-cgi" (es decir, sin procesos php corriendo) y volverla a mirar después de hacer una sola visita a una sola web (lo que obligará a lanzar un solo proceso php5-cgi).

Hecho esto, puedes tomar la diferencia que te salga como el consumo de un proceso php. Pongamos que te da 30Mb. En ese caso, podrías tener hasta 500(mb libres)/30(mb por proceso)= 17 procesos php como mucho sin saturar la máquina. Ahí ya tienes el valor para "MaxProcessCount" en /etc/apache2/mods-enabled/fcgid_ispcp.conf. Con eso ya deberías evitar que se sature el servidor.

Ahora te queda decidir cuantos de esos 17 procesos le permites usar a una sola de las webs. Es decir, si resulta que una web tiene un pico de visitas bestias, le permites llegar a utilizar todos los procesos dejando las demás webs sin poder funcionar? Imagino que no, así que pon de "DefaultMaxProcessClass" algo como 10 o 15 (cuanto más bajo menor el pico que puede aguantar una sola web, pero más seguro que las demás siguen funcionando).

Luego te queda configurar apache. Ten en cuenta que apache sirve directamente las peticiones que no són de archivos PHP, así que lo que necesitas en este paso es saber más o menos la proporción de peticiones PHP frente a peticiones no-PHP (imagenes, archivos css, javascripts, etc..). Supongamos que de cada 10 peticiones, 2 son de archivos PHP y 8 de otras cosas (ratio:8/2=4). Sabemos que no puedes procesar nunca más de 17 peticiones PHP a la vez (lo que hemos calculado arriba), así que apache debería aceptar 17 (peticiones php) + 17*4 (no php) = 85 conexiones simultáneas. Redondeamos a la alza (aunque no mucho) y diremos que 100 conexiones simultáneas estaría bien.

Así pues, ya tenemos que "MaxClients" (en /etc/apache2/apache2.conf, sección <IfModule mpm_worker_module>) debería ser 100. Ponemos "ThreadsPerChild" a 25 (que es el valor por defecto, compromiso entre que todo vaya bien y que no chupe demasiado), y sabemos que nunca tendremos más de 100/25=4 procesos apache "workers" a la vez más el master = 5 procesos apache en total.

Ahora reiniciamos apache y dejamos que el servidor opere con normalidad. Luego haces un poco de seguimiento del consumo de memoria y deberías ver que ya no se muere como antes. Si ocurre, a mirar qué parte está gastando más de lo que preveíamos y a reajustar...


RE: Cada 3 dias tengo que reiniciar el server - pleter - 04-03-2011 03:00 PM

Muy amable kilburn por la explicacion, la entendi a la perfeccion.

segun tus calculos, deberia usar de esta forma:
Code:
MaxProcessCount    17
DefaultMaxProcessClass    13
MaxClients    100
ThreadsPerChild    25

ya que que con un #kill php5-cgi me da 418 como base y con una consulta sube a 456 (en ocacion mas y en ocaciones menos, depende del sitio que mire) y tomando un "promedio" me da 38mb y al sacar los calculos, rodendeo un poco para arriba.

De todos modos, van 2 dias (y 7 horas y pico) por el momento y no tuve ningun problema, el maximo consumo llego a los 800 y se estanco por ahi, sube y baja pero anda cerca de los 800 siempre.

Por tal motivo y por que no se si hice bien el calculo, no me anime todavia a agregar esas modificaciones que cite recien. Estan bien los calculos? me conviene agregarlo verdad? note que algunos de esos no los tengo en la configuracion, es muy impresindible agregarlos?

Desde ya muchisima gracias a los tres

p.s.: estaba pensando en poner un script como este para que se ejecute todo el tiempo y "vigile mi server":

PHP Code:
#!/bin/bash
minram=75
extraminram
=25
while true; do
        
memusage=$(free -head -tail -awk {'print $4'})
        if [ 
"$memusage-lt "$minram]; then
                
/etc/init.d/apache2 -k reload
        fi
        
if [ "$memusage-lt "$extraminram]; then
                
/etc/init.d/apache2 -k restart
        fi
 
        sleep 1
done 
sera mala idea? es para que si "colapsa" se reinicie solo



RE: Cada 3 dias tengo que reiniciar el server - pleter - 04-23-2011 06:43 AM

ACTUALIZACION:
He notado cuando se "muere" apache2 de la nada (aun me sigue ocurriendo)
es que cuando lo llamo con el comando START me dice:
Code:
Starting web server: apache2WARNING: MaxClients (24) must be at least as large
as ThreadsPerChild (25). Automatically
increasing MaxClients to 25.
Esto estaba en 100 el maxclients ... por eso me parece raro que me diga que lo "incremente" a 25... asi que ahora saque los 100 y puse 25.. a ver que pasa... seguire informando que sucedera con mi problema por el que anda mas o menos con mi problema.