p.s. by "no threading" I mean to use processes in place of threads. The number of processes is something you must tune based on server resources, 2xn where n is the number of cores is a safe choice.
2014-11-30 20:04 GMT+01:00 Michele Comitini <michele.comit...@gmail.com>: > pool_size==number of threads in a web2py process. > I suggest to work around the problem by setting the number of threads to > 1 in you flup server. I.e. no threading. > You should also see smoother performance across applications on higher > loads. > > 2014-11-30 15:51 GMT+01:00 Lisandro Rostagno <rostagnolisan...@gmail.com>: > >> Yes in deed. I've restarted the webserver and the database server. >> Recently I've tried setting pool_size to 1 for every app, that is, for >> every website. Restarted postgresql and webserver (lighttpd). And then I >> used this SQL statement to check the total count of connections for every >> database (or what it is the same, for every app, because every app has its >> own database): >> >> select datname, count(*) from pg_stat_activity group by datname order by >> datname; >> >> Just to remind, I have around 13 apps running, that is, 13 websites, 13 >> databases. >> With this new configuration of every app using a pool size of 1, I >> restarted the database server and the webserver, and then I ran the >> previous SQL statement to see the total connections for every app, and I >> see 5 idle connections for every app, that is, for every website that has >> some visitors browsing the site. >> A couple of the websites almost never have visitors, so, for those >> websites, there were no idle connections. Then I go to the homepage of >> those websites, rechecked connections, and there I see 5 idle connections >> for those websites. >> >> I already checked and re-checked the code of my app to be shure that I'm >> setting "pool_size" parameter correctly. >> >> >> In the other hand, I've been testing pgbouncer on localhost, reading >> about it, and I'll be setting it for production. For what I've read, >> independently of the postgresql max connections, I can set pgbouncer to a >> max_client_conn of 2000 (for example) with a default_pool_size of 20. Then >> all the apps connect to pgbouncer, and pgbouncer will multiplex connections >> to postgres. However I don't want to mix things in this post, regardless of >> pgbouncer, I would like to understand why I can't get to work web2py's >> pooling mechanism. >> >> I'm really grateful for your help! I'll continue trying to figure it out. >> Any comment or suggestion will be appreciated. Thanks! >> >> >> 2014-11-30 9:48 GMT-03:00 Niphlod <niph...@gmail.com>: >> >>> did you restart the webserver ? I don't think that changing pool_size at >>> runtime when connections are still open will make the number of active >>> connection dropped. >>> >>> On Friday, November 28, 2014 8:48:07 PM UTC+1, Lisandro wrote: >>>> >>>> Mmm... I see. That was my understanding in the first place. >>>> At that time I did the maths, I had 10 apps, each one using a >>>> pool_size of 3. In postgresql.conf max_connections was set to 80. >>>> However this morning, with those numbers, almost every of my websites >>>> was throwing intermitent HTTP 500 errors, and the error tickets were >>>> all the same: FATAL: remaining connection slots are reserved for >>>> non-replication superuser connections. >>>> >>>> Right now, I have almost 13 websites, all of them with pool_size in 3, >>>> and max_connections in 80. >>>> However, if I check the table "pg_stat_activity" I can see 65 >>>> connections, and I can see there is 5 connections per app. >>>> >>>> I've tried even setting pool_size to 1 for one of the apps, restarted >>>> database server and webserver, but again I check pg_stat_activity and >>>> I see 5 connections for that app. ¿Am I missing something too ovbious? >>>> >>>> >>>> 2014-11-28 14:25 GMT-03:00 Niphlod <nip...@gmail.com>: >>>> > >>>> > >>>> > On Friday, November 28, 2014 3:31:02 PM UTC+1, Lisandro wrote: >>>> >> >>>> >> I go back to this thread because today I ran with the same problem: >>>> >> postgresql reaching max_connection limits and, therefor, some of my >>>> websites >>>> >> throwing intermitent HTTP 500 errors (because web2py couldn't >>>> connect to the >>>> >> database). >>>> >> >>>> >> To remind, we are talking of a VPS with multiple instances of web2py >>>> >> running, all of them serving the same web2py app, each one >>>> connecting to a >>>> >> different postgresql database (however the database structure is the >>>> same >>>> >> accross all the databases). Each web2py instance is served by a >>>> lighttpd >>>> >> virtual host through fastcgi. Each virtual host (that is, each >>>> web2py >>>> >> instance) receives a different volume of traffic (that is obvious, >>>> they are >>>> >> different websites with different public). >>>> >> >>>> >> The original problem (the one that caused I post this question in >>>> the >>>> >> first place) was that the postgresql database server was reaching >>>> the >>>> >> "max_connections" limit and, in consecuence, some of the websites >>>> were >>>> >> throwing intermitent HTTP 500 errors (web2py couldn't connect to >>>> database). >>>> >> >>>> >> Then, the user oriented me with "pool_size" parameter of DAL >>>> constructor. >>>> >> Thanks again! >>>> >> I've been reading the web2py documentation about pooling [1] and I >>>> notice >>>> >> that it says that "When the next http request arrives, web2py tries >>>> to >>>> >> recycle a connection from the pool and use that for the new >>>> transaction. If >>>> >> there are no available connections in the pool, a new connection is >>>> >> established". >>>> >> So, if I didn't get it wrong, I deduce that with web2py's pooling >>>> >> mechanism I can't overcome the "max_connections" postgresql limit. >>>> That is >>>> >> because, no matter the size of the pool, if the pool is full and the >>>> website >>>> >> is receiving a lot of requests, new connetions will be created, and >>>> >> eventually the database server will reach the "max_conectios" limit. >>>> > >>>> > >>>> > no, you got it wrong again. pool_size=5 will create AT MOST 5 >>>> connections . >>>> > if a 6th is needed, users will wait for a connection to be freed. >>>> > if your postgresql accept at most 50 connections, do the math. >>>> > Every db = DAL(, pool_size=5) lying around will create AT MOST 5 >>>> > connections, and that means you can host 10 apps. >>>> > If you need 50 apps, set pool_size=1 and let users wait, or set >>>> > max_connections in postgres to a higher value. >>>> > >>>> > -- >>>> > Resources: >>>> > - http://web2py.com >>>> > - http://web2py.com/book (Documentation) >>>> > - http://github.com/web2py/web2py (Source code) >>>> > - https://code.google.com/p/web2py/issues/list (Report Issues) >>>> > --- >>>> > You received this message because you are subscribed to a topic in >>>> the >>>> > Google Groups "web2py-users" group. >>>> > To unsubscribe from this topic, visit >>>> > https://groups.google.com/d/topic/web2py/5RTO_RqCsus/unsubscribe. >>>> > To unsubscribe from this group and all its topics, send an email to >>>> > web2py+un...@googlegroups.com. >>>> > For more options, visit https://groups.google.com/d/optout. >>>> >>> -- >>> Resources: >>> - http://web2py.com >>> - http://web2py.com/book (Documentation) >>> - http://github.com/web2py/web2py (Source code) >>> - https://code.google.com/p/web2py/issues/list (Report Issues) >>> --- >>> You received this message because you are subscribed to a topic in the >>> Google Groups "web2py-users" group. >>> To unsubscribe from this topic, visit >>> https://groups.google.com/d/topic/web2py/5RTO_RqCsus/unsubscribe. >>> To unsubscribe from this group and all its topics, send an email to >>> web2py+unsubscr...@googlegroups.com. >>> For more options, visit https://groups.google.com/d/optout. >>> >> >> -- >> Resources: >> - http://web2py.com >> - http://web2py.com/book (Documentation) >> - http://github.com/web2py/web2py (Source code) >> - https://code.google.com/p/web2py/issues/list (Report Issues) >> --- >> You received this message because you are subscribed to the Google Groups >> "web2py-users" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to web2py+unsubscr...@googlegroups.com. >> For more options, visit https://groups.google.com/d/optout. >> > > -- Resources: - http://web2py.com - http://web2py.com/book (Documentation) - http://github.com/web2py/web2py (Source code) - https://code.google.com/p/web2py/issues/list (Report Issues) --- You received this message because you are subscribed to the Google Groups "web2py-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to web2py+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.