commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Juozas Baliuka" <bali...@centras.lt>
Subject Re: [dbcp] Trying to track/find a connection leak in DBCP 1.1
Date Mon, 27 Oct 2003 20:11:05 GMT
It must be useful to add connection limit feature to TestDriver.

++connectionCount in Driver.connect() and --connectionCount in
Connection.close().

assertTrue( Driver.connectionCount == 0 ) at the end of test.

----- Original Message -----
From: "Todd Carmichael" <toddc@concur.com>
To: "'Jakarta Commons Developers List'" <commons-dev@jakarta.apache.org>
Sent: Monday, October 27, 2003 8:45 PM
Subject: RE: [dbcp] Trying to track/find a connection leak in DBCP 1.1


> I did perform this test.  Perhaps the original email was not clear in
> referencing the test of using JndiDataSourceFactory and that no leaks
> occurred.
>
> ToddC
>
>
> -----Original Message-----
> From: Juozas Baliuka [mailto:baliuka@centras.lt]
> Sent: Monday, October 27, 2003 9:53 AM
> To: Jakarta Commons Developers List
> Subject: Re: [dbcp] Trying to track/find a connection leak in DBCP 1.1
>
>
>
> Try to run app without pool first to find broken component. Most of
> Connection leak problems are in applications and it is not easy to trust
> this test.
>
> ----- Original Message -----
> From: "Todd Carmichael" <toddc@concur.com>
> To: <commons-dev@jakarta.apache.org>
> Sent: Monday, October 27, 2003 7:32 PM
> Subject: [dbcp] Trying to track/find a connection leak in DBCP 1.1
>
>
> > Our scalability tests against our web application (350 concurrent
> > users in
> a
> > web application using Tomcat 4.1.24 with JDK 1.4.2) is failing due to
> > a continual leak of database connections.  The test failed in that the
> number
> > of database connections (reported by the DB server: MS SQL Server)
> > grew to over a thousand during an hour plus test (using the microsoft
> > sql jdbc driver though we have tried the i-net driver with similar
> > results).  We
> know
> > that it is not a problem in the application because we have performed
> > identical tests except to configure Torque to use the
> JndiDatasourceFactory.
> > This in passes the connection pooling chores to the appserver.  Both
> SunOne
> > appserver and Weblogic appserver maintained a valid number of
> > connections
> (<
> > 75).  We are using Torque 3.1 with DBCP 1.1 (using the
> > org.apache.commons.dbcp.datasources.SharedPoolDataSource) and Pool
> > 1.1.
> >
> > Our settings in our torque.properties (which can passed down to the
> > SHaredPoolDataSource) are:
> >
> > torque.dsfactory.default.pool.maxActive=100
> > torque.dsfactory.default.pool.testOnBorrow=0
> > torque.dsfactory.default.pool.testOnReturn=0
> > #no setting for maxIdle.  It defaults to 8.  Not optimal but code
> > should still work:
> > torque.dsfactory.default.pool.timeBetweenEvictionRunsMillis=60000
> > torque.dsfactory.default.pool.numTestsPerEvictionRun=-1
> > torque.dsfactory.default.pool.minEvictableIdleTimeMillis=1000
> > torque.dsfactory.default.pool.testWhileIdle=false
> >
> > I have begun some debugging of this problem.  I have added some debug
> output
> > in the torqueInstance.getConnection to track size of the pool.
> >
> >             iCountConnections++;
> >             if ((iCountConnections % 100)==0)
> >             {
> >                 SharedPoolDataSource spds =
> > (SharedPoolDataSource)dsf.getDataSource();
> >                 log.warn("Current Num Active Connections=" +
> > String.valueOf(spds.getNumActive()));
> >                 log.warn("Current Num Idle Connections=" +
> > String.valueOf(spds.getNumIdle()));
> >                 log.warn("Max Active =" +
> > String.valueOf(spds.getMaxActive()));
> >                 log.warn("Max Idle =" +
> String.valueOf(spds.getMaxIdle()));
> >                 log.warn("Max Wait =" +
> String.valueOf(spds.getMaxWait()));
> >             }
> >
> > Here is a sample of the output when I run our scalability tests.  At
> > this point the system is under heavy load and the db server is
> > reporting over
> 100
> > connections:
> >
> > [WARN] TorqueInstance - -Current Num Active Connections=3 [WARN]
> > TorqueInstance - -Current Num Idle Connections=5 [WARN] TorqueInstance
> > - -Max Active =100 [WARN] TorqueInstance - -Max Idle =8
> > [WARN] TorqueInstance - -Max Wait =500
> > [WARN] TorqueInstance - -Current Num Active Connections=5
> > [WARN] TorqueInstance - -Current Num Idle Connections=3
> > [WARN] TorqueInstance - -Max Active =100
> > [WARN] TorqueInstance - -Max Idle =8
> > [WARN] TorqueInstance - -Max Wait =500
> > [WARN] TorqueInstance - -Current Num Active Connections=19
> > [WARN] TorqueInstance - -Current Num Idle Connections=0
> > [WARN] TorqueInstance - -Max Active =100
> > [WARN] TorqueInstance - -Max Idle =8
> > [WARN] TorqueInstance - -Max Wait =500
> > [WARN] TorqueInstance - -Current Num Active Connections=32
> > [WARN] TorqueInstance - -Current Num Idle Connections=0
> > [WARN] TorqueInstance - -Max Active =100
> > [WARN] TorqueInstance - -Max Idle =8
> > [WARN] TorqueInstance - -Max Wait =500
> > [WARN] TorqueInstance - -Current Num Active Connections=39
> > [WARN] TorqueInstance - -Current Num Idle Connections=1
> > [WARN] TorqueInstance - -Max Active =100
> > [WARN] TorqueInstance - -Max Idle =8
> > [WARN] TorqueInstance - -Max Wait =500
> > [WARN] TorqueInstance - -Current Num Active Connections=40
> > [WARN] TorqueInstance - -Current Num Idle Connections=0
> > [WARN] TorqueInstance - -Max Active =100
> > [WARN] TorqueInstance - -Max Idle =8
> > [WARN] TorqueInstance - -Max Wait =500
> > [WARN] TorqueInstance - -Current Num Active Connections=39
> > [WARN] TorqueInstance - -Current Num Idle Connections=2
> > [WARN] TorqueInstance - -Max Active =100
> > [WARN] TorqueInstance - -Max Idle =8
> > [WARN] TorqueInstance - -Max Wait =500
> >
> > As you can see, the number of connections reported by the pool is not
> > even close to the number connections reported by the database. ToddC
> >
> > Also we are getting an exception during the test:
> > java.sql.SQLException: Attempted to use Connection after closed() was
> > called. at
> >
>
org.apache.commons.dbcp.cpdsadapter.ConnectionImpl.assertOpen(ConnectionImpl
> > .java:140)
> > at
> >
>
org.apache.commons.dbcp.cpdsadapter.ConnectionImpl.getMetaData(ConnectionImp
> > l.java:253)
> > at org.apache.torque.util.Transaction.rollback(Transaction.java:193)
> > at
> > org.apache.torque.util.Transaction.safeRollback(Transaction.java:232)
> > at com.concur.om.base.BaseCtReportEntry.save(Unknown Source)
> >
> > After this exception occurs, I receive no more output as shown above.
> > The system appears deadlocked.  I can send a stack dump (Ctrl-Break on
> > Wintel machines).  The stack dump is pretty interesting as it shows
> > where the contention is within dbcp and pool system but I don't know
> > if it will help debug this leak problem (e.g. only one thread can
> > create a db connection
> at
> > time because the connection to the db is created during makeobject).
> > Let
> me
> > know if anyone is interested in seeing the dump.
> >
> > This problem is critical for us (I had advocated moving to new Torque
> > and DBCP and now am in a tough spot with this problem).  I will
> > continue to debug what I can and can apply patches fairly easily and
> > run them.
> >
> > Thanks for any timely help
> > Todd Carmichael
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
> > For additional commands, e-mail: commons-dev-help@jakarta.apache.org
> >
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: commons-dev-help@jakarta.apache.org
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: commons-dev-help@jakarta.apache.org
>


---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org


Mime
View raw message