BULMA Bulma amb el projecta Defective by Desing
Bergantells Usuaris de GNU/Linux de Mallorca i Afegitons   |   Bisoños Usuarios de GNU/Linux de Mallorca y Alrededores
CONTENIDOS
. Jornadas de software libre
. Version para PDA
. Enlaces breves
. La asociacion
. Los mas leidos
. Autores [Actividad]
. Ultimos Comentarios
. Todos los titulares!
. Estadisticas
. Guia de estilo
. ¿Sugerencias?
. Wiki
. XML [Ayuda]
Listas de correo
. Archivos bulmailing
. Archivos BulmaGes
Radio libre :-)
. Des de la Xarxa (Archivos)
. Mallorca en Xarxa
Busquedas

+ Enlaces Linux
Ultimos kernels
(02/09/2010 18:16:25)
    
Google


En bulma.net
En internet
De como sobrevivimos, más mal que bien, al efecto Slashdot (12362 lectures)
Por Ricardo Galli Granada
gallir (http://mnm.uib.es/gallir/)
Creado el 11/05/2001 01:08 modificado el 11/05/2001 01:08

Si, un atentado sin aviso previo :( nos dejó el Postgres hecho polvo y tuve que hacer virguerías para poder servir páginas, mas lentamente pero al menos sin errores. De ellos aprendí una cosa importante, nunca te fíes pensando "total tengo poco tráfico" y menos aún si se te ocurre envíar un mensaje a la lista linux-kernel.


Pagina1/1

[Actualización, 2:27 hrs]: Que bien parece a una peli ;-). Bueno, son las 2 y pico, hice unas modificaciones a los scripts para reducir los select count() y algunos otros redundantes. También agregué un control del valor retornado por el pg_pconnect y ya activé los scripts nuevos.

Ahora está todo normal, le puse a Guillem el contador más o menos con los accesos que hubo en estar horas, aunque seguramente hubiera sido mucho mayor si no hubiese habido semejante tormenta.

Aunque siguen habiendo muchos accesos (unos pocos por segundo), ya se comporta normal y la carga del sistema está bastante bien (entre 0.01 y 0.10).


Sipe, se me ocurrió enviar esta madrugada (por el día 10 de mayo) un mensaje a la lista de linux-kernel para que miren las pequeñas pruebas hechas por Guillem. La sorpresa comenzó a los 10 minutos de haberlo enviado cuando empezamos a recibir bastante tráfico, pero muy soportable, no más de una visita cada pocos segundos.

Pero ocurrió lo peor, alguien envió el enlace a Timothy de Slashdot y nos sacaron en sus páginas.  Según los logs, todo comenzó a las 8 de la noche, cuando yo estaba dando clases de Sistemas Operativos. A las 9:30 termino, voy a mi despacho a leer un poco las noticias de Bulma (y controlar el servidor, sobre todo porque estoy haciendo pruebas del APC) y me encuentro con la desagradable sorpresa de los mensajes del PHP: no puedo conectarme a Postgres, número de clientes excedidos...

Vaya faena, para mantener funcionando tuve reduje los clientes máximos del Apache y subí los del Postgres. No puede poner más de 32 al PG porque es el límite que viene en el precompilado (si señor, nunca instales binarios...;-). en RPM del sitio de Postgres. 

Al final tuve que ponerme a editar los scripts de Bulma para reducir al máximo los queries y eliminar los updates que cuentan la cantidad de lecturas de cada artículo. Con esto mejoró muchísimo, pero aún así daba errores a veces, así que me di cuenta:

  • No controlábamos que la conexión a la base de datos haya sido satisfactoria (en el pg_pconnect) por lo que el PHP daba montón de errores al intentar seguir ejecutando el script. Esto es un BUG como una casa... La solución fue ponerle un bucle que lo intentaba 10 veces con una espera de unas pocas décimas cada vez. Con ello retrasaba la respuesta pero al menos no daba tantos errores.
  • En el php.ini estaba habilitada la salida de errores. Aunque está comentado que para servidores en producción se deshabilite la salida, lo teníamos habilitado porque lo usaba para el debug de desarrollo de los programas. Moraleja: intenta tenerlo siempre deshabilitado, nunca se sabe si aparecerás en Slashdot.
  • El Postgres es muy lento para responder a consultas que involucran el ordenamiento de la salida. Y no hay forma de optimizarlo a niveles razonables.

Al final pude volver a casa a las 11:15 de la noche, y mientras Guillem disfrutaba de la fama, yo me comía el rapapolvo de mi mujer...

RESUMEN: tuvimos unas 12000 visitas y 100.000 hits en 2 horas. El Linux (2.4.4) no tuvo ningún problema,  la carga (loadavg) nunca superó 1.5 en las peores horas y 0.7 más o menos cuando ajusté los parámetros. Además, mientras pasaba esto,  estaba enviando los mensajes de la lista de correo y yo estaba editando los scripts y leyendo mi correo. ¿Que hubiese pasado con un Windows y ASP sobre la misma máquina?

 Al fin y al cabo fue toda una experiencia.

--ricardo

Mas leña...

> > Como se nota que nunca has sido slashdotted con el puto postgres... ;-)
>
> Pero si el Postgres es una caña. (mientras no lo ataques desde
> Access).
>
> Es que ese error que saca es por alcanzar el máximo de cliente. Con
> subirlo ya esta. Y si al arrancar no lo defines el máximo se pone en 32.

 

Como se nota que no leen mis artículos y los comentarios de los mismos...;-) 

Un tío, bishi, me estuvo pasando unos parámetros bastantes buenos.

No todo se soluciona aumentando servidores. Sino podríamos coger un PIII con 4GB de RAM y servir 4 millones de páginas por día sencillamente poniendo a 5000 el número de procesos de Postgres. Y todos sabemos que no es así....

El RPM que viene con el RPM de postgresql.org tiene un máximo "insuperable" de 32 servidores (ver explicación ). Pero este no era el problema principal, sino que el Postgres no podía servir más de 10-15 peticiones por segundo (como explico en los tests de aqui).

O sea, pon los clientes que sea, pero no se superaban las 15 páginas por segundo, con un tiempo de retorno mínimo (sin concurrencia) de 0.08 segundos (para una página de artículo) pero que podía llegar fácilmente (como lo hizo) a más de 3 segundos cuando estaban los 30 servidores.

Mucha culpa tenías los SELECT complejos que hacíamos para el índice de la derecha, sobre todo por el "ORDER BY ... DESC" de la fecha de modificación, que fue lo primero que quité cuando estábamos /.ed.

Luego también saqué los dos a tres SELECT COUNT que hacíamos (verás que ya no aparece el total de artículo) y así pude reducir bastante el tiempo de retorno en el PHP.

Puse también 2048 buffers de memoria compartidda, pero no solucionaba nada y los bajé a 512 para tener más memoria para el Apache (llegamos a tener más de 400 procesos) y buffer/cache (que beneficia mucho al postgres).

Y para finalizar estuvimos todo el tiempo con mi versión modificada del APC (disminuye la "contención" de semáforos) con un algoritmo de lectores/escritores con tres semáforos (que me costó un par de días pensarlo) donde sólo los escritores (menos del 0.01% ) mantienen un "lock" global para optimizar el PHP4.

En resumen, para poder servir al menos parcialmente tuve que modificar la cantidad de clientes del Apache (para reducir os bloqueos en la base de datos), modificar el php.ini para poner a tope las conexiones persistentes y dejarme un par de backends libres para hacer vacuumdb cada hora, modificar bulma.php3 y recordset.php3 para disminuir los sql complejos, cambiar los parámetros del buffer de Postgres teniendo en cuenta la memoria, porque me empezó hacer swapping y tenía que evitarlo a toda costa.

En resumen, bastante complejo y que sólo lo entenderías si lo hubieses vivido en directo y haber visto que si tocabas una parámetro, solucionabas una cosa y la cagabas por otra.

Ah... si la vida fuese _tan_ sencilla como hacer un

# postmaster -B 100000 -S 100000 -N 1000

hubiera podido dormir tranquilo anoche ;-)


Imprimir
Version para
imprimir

Imprimir
Version
PDF
Comentarios
Es posible que se hayan omitido algunos comentarios considerados poco constructivos
1.  Re:De como sobrevivimos, más mal que bien, al efecto Slashdot (11/05/2001 01:15, #1202)
  Por: Beowulf (http://starkmad.yi.org:8888/)
Con Windows y ASP? Que te hubieses quejado a Micro$oft y ellos te habrian dicho "es que tienes una porqueria de máquina, comprate un servidor decente" X'-D
No es pot respondre
 
2.  Re:De como sobrevivimos, más mal que bien, al efecto Slashdot (11/05/2001 01:35, #1205)
  Por: carcoco (http://carcoco.eresmas.com)
Si, la verdad es que ha sido alucinante, parece mentira que pueda ser tan exagerado el efecto de aparecer una noticia de rabiosa actualidad en Slashdot, me pregunto que hubiera pasado si se hubiera hecho a proposito, es decir: el test y el texto hubiera estado en ingles, se hubiera enviado la noticia a varios sitios tipo Slashdot a la vez.

Bueno supongo que se habria dado el mismo efecto pero multiplicado por bastantes unidades.

Lo bueno: Se han corregido/detectado errores, un poco a marcha forzadas (gracias al incombustible Ricardo), que significaran la mejora de Bulma.

Una pregunta, no existe algun programa o script, que hubiera permitido simular lo que ha pasado con bulma esta tarde/noche ????
No es pot respondre
 
3.  Re:De como sobrevivimos, más mal que bien, al efecto Slashdot (11/05/2001 02:07, #1207)
  Por: gallir (http://m3d.uib.es/~gallir/)
Justamente estaba haciendo unas pruebas con el ApacheBenchmarks hac un par de días (http://bulma.lug.net/body.phtml?nIdNoticia=625) y noté que el postgres iba muy mal y que teníamos que optimizarlo.

De todas formas tiraba sin problemas 10-15 conexiones por segundo con 10 clientes simultáneos.

Ahora acabo de sacar los select count() (había dos o tres) y los tiempos han mejorado muchísmo. En la página principal se redujo un 40% por lo menos y un 20.30 en los artículos (que ya estaba un poco optimizado).

--ricardo
No es pot respondre
 
4.  Re:De como sobrevivimos, más mal que bien, al efecto Slashdot (11/05/2001 02:39, #1210)
  Por: El cobarde anonimo
[Me voy a dormir, 2.43 horas]: Esto también parece una peli X'-D

Bueno, parece que ahora la cosa ya se ha calmado...
No es pot respondre
 
5.  Re:De como sobrevivimos, más mal que bien, al efecto Slashdot (11/05/2001 10:45, #1218)
  Por: Eduardo Maldonado (http://users.servicios.retecal.es/rsantos)
¿Os habeis puesto en contacto con la gente de PostgreSQL
No es pot respondre
 
6.  Re:De como sobrevivimos, más mal que bien, al efecto Slashdot (11/05/2001 10:47, #1219)
  Por: Eduardo Maldonado (http://users.servicios.retecal.es/rsantos)
Perdón, me he liado.

A lo que iba: ¿Os habeis puesto en contacto con la gente de PostgreSQL para preguntar si había algo que cambiar o mejorar en la instalación de PostgreSQL?

¿Y probar a recompilar el PostgreSQL modificandole el número de conexiones simultáneas?

En cualquier caso, enhorabuena por el trabajo.

Eduardo
No es pot respondre
 
7.  Re:De como sobrevivimos, más mal que bien, al efecto Slashdot (11/05/2001 10:56, #1221)
  Por: gallir (http://m3d.uib.es/~gallir/)
Creo que es mas culpa nuestra que de Postgres. Las limitaciones son de sobra conocidas, menos la del bajo rendimiento para el ordenamiento por fecha (existiendo un índice) ya que es lo más normal en un web.

En cuanto a lo de recompilar, ni lo habíamos pensado porque normalmenete con 8-10 backends es más que suficiente para los accesos que tenemos.

¿Quién iba a pensar que los de Slashdot iban a enlazar a una pequeña web de "chavales" en unas islas perdidas en el mediterráneo? ;-)


--ricardo
No es pot respondre
 
8.  Como optimizar postgres para que vaya más rápido!!! (11/05/2001 12:14, #1227)
  Por: Guille -bisho- (http://www.eurielec.etsit.upm.es/)
Hay que seguir una serie de pasos para obtener una mejora en el rendimiento de postgres:

1- Aumentar el numero de clientes (Optión -N del backend)

2- Aumentar la memoria compartida usada como caché de consultas (si tienes mucha memoria, se puede incrementar mucho y el rendimiento aumenta considerablemente) Es la opción -B del backend, que configura el numero de segmentos de 8Kbytes.

3- Si tienes queries complejos, aumentar la memoria de procesamiento de queries, para que quepa todos los datos que se están procesando en esa memoria y los queries sean procesados más rápido (opción -o "-Snnn" del backend)

4- Configurar bien el numero de ficheros abiertos posibles en linux.

5- Configurar bien la memoria compartida de linux, maxima usable, numero maximo de segmentos, tamaño de segmentos. Con ipcs -l listas los límites de tu máquina.

6- Ejecutar el comando "vacuum analyze" todos los dias, para que mejore las optimizaciones que hace postgres segun los datos que va almacenando de las consultas reales que recibe. El vaccum hay que hacerlo despues de que el servidor empiece a recibir tráfico real, no con benchmarks, ya que en ese caso optimizará de diferente manera.

Ahora mi configuración:
lanzo el backend con:
/.../postmaster -B3072 -S -o "-S4096" -N 100 ...
26 megas de memoria compartida, para cache de consulta
4 megas de buffer de procesamiento de queries
100 clientes simultáneos
No es pot respondre
 
9.  Re:De como sobrevivimos, más mal que bien, al efecto Slashdot (11/05/2001 13:01, #1229)
  Por: gallir (http://m3d.uib.es/~gallir/)
Sipe, tienes razón, estaban las cosas puestas para que soporte unas 10-15 conexiones por segundo, pero no para centenas ;-)

Desde anoche he quitado algunos queries también...

Y con lo del vacuumdb, lo tenía que hacer cada hora porque el update de los contadores de lecturas hacía crecer mucho la cantidad de páginas y aumentaba mucho el "tiempo de retorno" (ese tiempo en rojo que figura abajo de la página).

¿Cuantas conexiones simultáneas te aguanta tu configuración?

Un abrazo.

--ricardo
No es pot respondre
 
10.  Re:De como sobrevivimos, más mal que bien, al efecto Slashdot (11/05/2001 13:14, #1232)
  Por: gallir (http://m3d.uib.es/~gallir/)
Perdon, quería preguntar ¿Cuantas conexiones por segundo permite?
No es pot respondre
 
11.  Re: Optimización de postgres (11/05/2001 13:16, #1233)
  Por: bisho (http://www.eurielec.etsit.upm.es)
En teoría el numero de conexiones simultáneas solo depende de la memoria que tengas. Mira cuando ocupa cada proceso de postgres, mira cuanta RAM libre tienes y usa ese numero.

Mi numero de 100 conexiones seguramente es excesivo, y me quedaría sin memoria antes, pero bueno.

La configuración que yo tengo no va encaminada a soportar un gran numero de usuarios concurrentes, sino a queries bastante complejos, por lo que no he tenido que preocuparme demasiado por benchmarks y comprobar el numero de conexiones máximo.
No es pot respondre
 
12.  Re:De como sobrevivimos, más mal que bien, al efecto Slashdot (11/05/2001 13:29, #1234)
  Por: gallir (http://m3d.uib.es/~gallir/)
Si habéis visto una parada de un minuto es porque cambié la configuración del postgres...*** y me daba un error de sintaxis en el /etc/init.d/postgres (maldito pg_ctl ;-)

*** Bajé la memoria porque no había mejoras... en realidad tardaba mas. Ahora está con 512 buffers.

--ricardo
No es pot respondre
 
13.  Conexiones por segundo... (11/05/2001 13:49, #1235)
  Por: bisho (http://www.eurielec.etsit.upm.es)

Con una página sencilla (hace un select de eventos de un año y un mes, ordenado por dia, todo campos int)

# ab -c 10 -n 500 http://127.0.0.1/calendario/mes.php?mes=6
This is ApacheBench, Version 1.3c <$Revision: 1.38 $> apache-1.3
Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright (c) 1998-1999 The Apache Group, http://www.apache.org/

Server Software: Apache/1.3.12
Server Hostname: 127.0.0.1
Server Port: 80

Document Path: /calendario/mes.php?mes=6
Document Length: 1299 bytes

Concurrency Level: 10
Time taken for tests: 16.859 seconds
Complete requests: 500
Failed requests: 0
Total transferred: 765000 bytes
HTML transferred: 649500 bytes
Requests per second: 29.66
Transfer rate: 45.38 kb/s received

Connnection Times (ms)
min avg max
Connect: 0 1 158
Processing: 211 332 361
Total: 211 333 519

Casi 30 peticiones por segundo. Naturalmente las consultas complejas no pueden ir así de rápido. :)))

Ah.. y no uso ni conexiones persistentes ni APC. Seguramente con conexiones persistentes, al tener ya arrancados un numero razonable de clientes, te quitará el overhead de lanzar un nuevo proceso de postgres.

La máquina es un Pentium III 800 Mhz 256 Mb RAM y discos duros IDE en RAID 5.

Entre otras cosas la base de datos postgres tiene una tabla (de solo dos campos eso sí) con 1,1 millones de entradas (es la tabla de enlace de IDs entre otras dos tablas de 60k y 40k entradas). Las consultas son bastante complejillas y aguanta bien.
No es pot respondre
 
14.  Re:Enhorabuena (11/05/2001 23:43, #1259)
  Por: ^SWITCH^
Enhorabuena chicos.
Todavía recuerdo el día en que Ricardo animaba a la gente en clase de S.O. para que desarrollara en Linux (ese MINIX, ¡Qué dolores de cabeza!) y formaran un grupo para seguir con la "táctica" del bazar.
Por aquel entonces nadie daba un duro por la idea (los estudiantes de la UIB somos insolidarios, la mayoría) pero habéis conseguido una web genial.
Es simple, al estilo de Slahdot, barrapunto o (aunque no tenga nada que ver) google.
El contenido se mantiene actualizado constaqntemente. Una visita diaria es tarea obligada.
Un aplauso a Ricardo por su labor en el perfeccionamiento. Poco a poco va mejorando lo que parece inmejorable.
Y mi más sincera ehorabuena por vuestra aparación en barrapunto (ya os había visto alguna otra vez) y en Slashdot.
Me alegro de os vaya todo tan bien. Que siga así.
Un saludo a todos.
No es pot respondre
 
GRACIAS
Distribuciones Universal
Por el servidor
Dpto. de Matematicas e Informatica
Calificacion
***0
Vots: 6
Danos tu opinion:
**** Excelente
***0 Muy Bueno
**00 Bueno
*000 Regular
0000 Malo
Relacionados
. Historia de un ataque DoS
. Pruebas con XFS, ReiserFS, Ext2FS, y FAT32
. Reducción del tiempo de respuesta de Bulma optimizando las consultas a Postgres
SECCIONES
Noticia
Breve
Truco
Enlace
Participa
Proyecto
Articulo
Webbulma
Manoletada :-)
Seguridad
Modificado: 20/6/2007 18:10:02 | Tiempo Total: 0.053 segs | Kernel: Linux - i686 - 2.6.26-1-686 | Last boot: 02/09/2010 20:11 CEST
Powered by Apache    MySQL    PHP    Gimp