El 13 de febrero de 2009 12:45, Silvio Quadri <[email protected]> escribió:
> El día 12 de febrero de 2009 22:06, p2p p2p <[email protected]> escribió: > > > > > > El 12 de febrero de 2009 20:06, Silvio Quadri <[email protected]> > escribió: > >> > >> El día 12 de febrero de 2009 15:40, p2p p2p <[email protected]> > escribió: > >> > Buenas tardes, > >> > > >> > Tengo una aplicación web que está utilizando PostgreSQL, y en > >> > determinados > >> > momentos del día cuando hay aproximadamente unos 50 usuarios > conectados > >> > la > >> > cosa va bien, la máquina suele estar con un load average de 3.5 > >> > aproximadamente, si las consultas que le hacen los usuarios son muy > >> > pesadas. > >> > El problema es que hay momentos del día > >> > en los que la máquina se queda completamente colgada y no se recupera > en > >> > cuestión de horas. > >> > > >> > Al principio pensaba que podría ser por el número de conexiones que > >> > puede > >> > admitir como máximo (max_connections) y le aumenté este valor a 500, y > >> > el de > >> > shared_buffers a 8MB. Por lo que he podido observar, en los momentos > que > >> > la > >> > máquina se queda colgada es cuando están las 500 conexiones activas. > Hay > >> > muchísimas consultas que indican que llevan varios minutos en > ejecución, > >> > algunas otras en estado IDLE, y otras tantas que aparecen repetidas. > >> > > >> > He estado monitorizando con top, y veo que el load average puede > llegar > >> > a > >> > alcanzar picos de hasta 120. Otro detalle que he observado es que la > >> > máquina > >> > no hace swap, lo que me hace pensar que no es problema de memoria. La > >> > máquina es un servidor con 3 GB de RAM, y la versión de PostgreSQL es > la > >> > 8.2. > >> > >> ¿8MB de shared buffers? Es lo mismo que nada. > >> ¿500 conexiones web o 500 usuarios? > >> Silvio > >> > > > > En la documentación dice que el valor de shared_buffers debe ser igual al > > número de max_conections x 16 KB. > > > > max_conections x 16 KB = 500 x 16 = 8000 > > > > De ahí que haya puesto 8MB. ¿Qué valor para shared buffers me > recomiendas? > > > > La documentación dice AT LEAST 128 kilobytes and AT LEAST 16 kilobytes > times > > " > Sets the amount of memory the database server uses for shared memory > buffers. The default is typically 32 megabytes (32MB), but might be > less if your kernel settings will not support it (as determined during > initdb). This setting must be at least 128 kilobytes and at least 16 > kilobytes times max_connections. (Non-default values of BLCKSZ change > the minimum.) However, settings significantly higher than the minimum > are usually needed for good performance. Several tens of megabytes are > recommended for production installations. This parameter can only be > set at server start. > " > > Ponele 200M para empezar, pero no es el único parámetro que vas a > tocar. Otros más avezados que yo te pueden guiar mejor. Vas a tener > que tocar un parámetro en el sistema operativo antes de reiniciar. > > http://www.postgresql.org/docs/8.3/interactive/kernel-resources.html#SYSVIPC > > > > Las 500 conexiones, son conexiones a la BD. Según una tabla que tengo que > me > > indica los usuarios que están online, suele estar entre 50 o 60 usuarios. > > ¿Y las 500 son de Web server? Al principio decías que era una > aplicación Web ... Hay algo que está mal en el web server. > > ¿Identificaste el proceso que "chupa" todo el procesador cuando se cuelga? > Las 500 conexiones son consultas que se hacen desde el Web Server. La arquitectura actual es: 1 Balanceador de peticiones web + 4 Frontales Web (Apache) + 1 BD PostgreSQL Los frontales web tienen un load average de 0.x, y la máquina de la BD un load average que llega a alcanzar hasta 1XX. Los procesos que consumen toda la CPU son múltiples procesos de "postmaster". Gracias. > > > Silvio > > > > > > Muchas gracias. > > > >> > >> > > >> > ¿Qué puede estar pasando? ¿Qué me recomendáis que haga? > >> > > >> > Muchas gracias. > >> > > >> > >> > >> > >> -- > >> Silvio Quadri > > > > > > > > -- > Silvio Quadri >
