commons-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Martin Dyulgerov <newadmi...@gmail.com>
Subject Re: DBCP problem with idle object
Date Tue, 02 Dec 2008 07:44:55 GMT
Thank you Phil! I see the logic in your reply. I'll try those 
suggestions, first thing today. I'll remove the following setting from 
my file:

config.minIdle=5;
config.timeBetweenEvictionRunsMillis=1000;
config.minEvictableIdleTimeMillis=1000;

Hope it works!

Best regards,

Martin

Phil Steitz wrote:
> Martin Dyulgerov wrote:
>> Hello group!
>>
>> This is the first time i actuali write something in here. First of 
>> all - please excuse my bad english, it is not my native language. Now 
>> to get to the point... I have problems implementing DBCP on my Tomcat 
>> 6.0.18 in my web applications. I don't want to use JNDI, that is why 
>> i have ServletContextListener, in witch i do as follows in order:
>>
>> 1.Define GenericObject Pool
>> 2. Define ConnectionFactory as implementation of 
>> DriverManagerConnectionFactory
>> 3.Define PoolableConnectionFactory with the previously created 
>> GenericObjectPool and ConnectionFactory
>> 4.Define PoolingDataSource with the GenericObjectPool object from step 1
>>
>> Then i "stick" my PoolingDataSource to the servlet context, retreive 
>> it in my JSPs and servlets and aquire a connection via 
>> "getConnection()" (which returns Connection object). I make sure to 
>> close() all my connections at the edn of the pages...I am sure that 
>> the connections that are opened dont exceed the number 100 (which is 
>> the maximum number of connections on my database - a MySQL database 
>> system), so i think there must be something wrong with my pooling 
>> code. The exact error i get is:
>>
>> "Exception: Cannot get a connection, pool error Timeout waiting for 
>> idle object SQL Exception Connection is closed. SQLException 
>> Connection is closed." At some point i began to ask myself if it the 
>> problem is caused by the restarts(reloads) i do for that exact 
>> application, because the other work fine (byt i dont play with them 
>> that much)... My configurations for the GenericObjectPool and 
>> DriverManagerConnectionFactory are as follows:
>>
>> GenericObjectPool.Config config=new GenericObjectPool.Config();
>>            config.maxActive=15;
>>            config.maxIdle=10;
>>            config.minIdle=5;
>>            config.maxWait=3000;
>>            config.testOnBorrow=true;
>>            config.testOnReturn=true;
>>            config.testWhileIdle=true;
>>            config.timeBetweenEvictionRunsMillis=1000;
>>            config.minEvictableIdleTimeMillis=1000;
>>
>> Properties p=new Properties();
>>            p.setProperty("user", user);
>>            p.setProperty("password", password);
>>            p.setProperty("useUnicode", "true");
>>            p.setProperty("characterEncoding", "CP1251");
>>            p.setProperty("autoReconnect", "true");
>>
>> Can You help me please? Any help will be appriciated. Thanks in 
>> advance, and accept my apologies if i have breaked some rules of the 
>> group or something like that.
> These settings make it hard for the pool to manage connections:
>           config.maxIdle=10;
>           config.minIdle=5;
>           config.timeBetweenEvictionRunsMillis=1000;
>           config.minEvictableIdleTimeMillis=1000;
>
> The first two force the pool to try to keep the number of idle 
> connections between 5 and 10, which is going to force it to close / 
> open frequently to stay within that relatively narrow range.   Unless 
> you really need both of these, I would recommend eliminating one or 
> both of them.
>
> The second two are probably the source of your problem.  These 
> parameters are specified in milliseconds (thousandths of a second).  
> The first one tells the pool to kick off an evictor run every second 
> and the second tells it to destroy any connections that sit idle for 
> more than a second.  This will create lots of connection churn and 
> also pool access contention as the idle object evictor runs every 
> second and closes connections that have been idle and then tries to 
> create new ones to reach minIdle.  You should either increase both of 
> these by at least an order of magnitude or drop  them.   Unless you 
> really want to close connections that have been idle in the pool for 
> longer than a specified idle timeout, I would drop these.
>
> Phil
>
>
>
>
>>
>> All best,
>>
>> Martin
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
>> For additional commands, e-mail: user-help@commons.apache.org
>>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
> For additional commands, e-mail: user-help@commons.apache.org
>
>



Mime
View raw message