I have a highly multhreaded app...We use about 300 threads which are constantly using 100% of the CPU (its designed to do this to make efficient use of the hardware)...


I've noticed two bugs with dbcp 1.2.1...

The first is that if you use a shallow pool with a high number of threads it will lock at startup. I've also noticed this with older versions of dbcp but theres a workaround. I just set initialSize to the maxActive size of the pool.. that way all the connections are allocated in a single thread.

Now I've noticed a bad deadlock after running for about 7 hours.

I did a killall -3 to get the running stacktrace.

They all seem to be locked :

org.apache.commons.dbcp.datasources.SharedPoolDataSource.getPooledConnectionAndInfo(SharedPoolDataSource.java:155)

Which is:

152: protected synchronized PooledConnectionAndInfo

153:        getPooledConnectionAndInfo(String username, String password)

154:        throws SQLException {

155:        if (pool == null) {

156:            try {

157:                registerPool(username, password);

158:            } catch (NamingException e) {

159:                throw new SQLNestedException("RegisterPool failed", e);

160:            }

161:        }

162:
163:        PooledConnectionAndInfo info = null;

164:        try {

165:            info = (PooledConnectionAndInfo) pool

166:                .borrowObject(getUserPassKey(username, password));

167:        }

168:        catch (Exception e) {

169:            throw new SQLNestedException(

170:                "Could not retrieve connection info from pool", e);

180:        }

181:        return info;

190:    }


I used a tool I wrote to remove duplicate stack traces to see if there was any obvious contention and I didn't see any:


http://www.peerfear.org/rss/permalink/2003/10/26/MiningForExceptionsInLogFiles/


Total unique exception results: 24

Total matches: 370

-------------

References: 225

-------------

   at 
org.apache.commons.dbcp.datasources.SharedPoolDataSource.getPooledConnectionAndInfo(SharedPoolDataSource.java:155)

   - waiting to lock <0x49ed74d8> (a 
org.apache.commons.dbcp.datasources.SharedPoolDataSource)

   at 
org.apache.commons.dbcp.datasources.InstanceKeyDataSource.getConnection(InstanceKeyDataSource.java:631)

   at 
org.apache.commons.dbcp.datasources.InstanceKeyDataSource.getConnection(InstanceKeyDataSource.java:615)

   at org.apache.torque.Torque.getConnection(Torque.java:936)

   at org.apache.torque.Torque.getConnection(Torque.java:870)

   at ksa.om.BaseResourcePeer.doSelectPSLazy(BaseResourcePeer.java:1370)

   at ksa.om.BaseResourcePeer.doSelect(BaseResourcePeer.java:1103)

   at ksa.om.BaseResourcePeer.doSelectFirstRecordAsString(BaseResourcePeer.java:1285)

   at ksa.om.ResourcePeer.getResourceAsString(ResourcePeer.java:92)

   at ksa.om.Feed.getResourceAsString(Feed.java:257)

   at ksa.robot.FeedTask.setFeed(FeedTask.java:138)

   at ksa.robot.UpdateFeedQueue.visit(UpdateFeedQueue.java:103)

   at ksa.robot.TaskThread.doProcessTask(TaskThread.java:256)

   at ksa.robot.TaskThread.run(TaskThread.java:88)

-------------

References: 47

-------------

   at ksa.robot.TaskQueue.getNextXToProcess(TaskQueue.java:59)

   - waiting to lock <0x4f9cdb00> (a ksa.robot.ArticleQueue)

   at ksa.robot.TaskThread.doProcessTask(TaskThread.java:252)

   at ksa.robot.TaskThread.run(TaskThread.java:88)

-------------

References: 39

-------------

   at ksa.robot.TaskQueue.getNextXToProcess(TaskQueue.java:61)

   - waiting to lock <0x5060dfb0> (a ksa.robot.ImageQueue)

   at ksa.robot.TaskThread.doProcessTask(TaskThread.java:252)

   at ksa.robot.TaskThread.run(TaskThread.java:88)

-------------

References: 11

-------------

   at 
org.apache.commons.dbcp.datasources.SharedPoolDataSource.getPooledConnectionAndInfo(SharedPoolDataSource.java:155)

   - waiting to lock <0x49ed74d8> (a 
org.apache.commons.dbcp.datasources.SharedPoolDataSource)

   at 
org.apache.commons.dbcp.datasources.InstanceKeyDataSource.getConnection(InstanceKeyDataSource.java:631)

   at 
org.apache.commons.dbcp.datasources.InstanceKeyDataSource.getConnection(InstanceKeyDataSource.java:615)

   at org.apache.torque.Torque.getConnection(Torque.java:936)

   at ksa.om.BaseArticlePeer.retrieveByPK(BaseArticlePeer.java:813)

   at ksa.om.BaseArticlePeer.retrieveByPK(BaseArticlePeer.java:795)

   at ksa.robot.ArticleTask.run(ArticleTask.java:70)

   at ksa.robot.TaskThread.doProcessTask(TaskThread.java:257)

   at ksa.robot.TaskThread.run(TaskThread.java:88)

-------------

References: 9

-------------

   at ksa.robot.TaskQueue.getNextXToProcess(TaskQueue.java:59)

   - waiting to lock <0x50615bb8> (a ksa.robot.InitFeedQueue)

   at ksa.robot.TaskThread.doProcessTask(TaskThread.java:252)

   at ksa.robot.TaskThread.run(TaskThread.java:88)

-------------

References: 7

-------------

   at 
org.apache.commons.dbcp.datasources.SharedPoolDataSource.getPooledConnectionAndInfo(SharedPoolDataSource.java:155)

   - waiting to lock <0x49ed74d8> (a 
org.apache.commons.dbcp.datasources.SharedPoolDataSource)

   at 
org.apache.commons.dbcp.datasources.InstanceKeyDataSource.getConnection(InstanceKeyDataSource.java:631)

   at 
org.apache.commons.dbcp.datasources.InstanceKeyDataSource.getConnection(InstanceKeyDataSource.java:615)

   at org.apache.torque.Torque.getConnection(Torque.java:936)

   at org.apache.torque.Torque.getConnection(Torque.java:870)

   at ksa.om.BaseResourcePeer.doSelectPSLazy(BaseResourcePeer.java:1370)

   at ksa.om.BaseResourcePeer.doSelect(BaseResourcePeer.java:1103)

   at ksa.om.BaseResourcePeer.doSelectFirstRecord(BaseResourcePeer.java:1209)

   at ksa.om.ResourcePeer.getResourceByValue(ResourcePeer.java:47)

   at ksa.om.DuplicateResourceManager.getObject(ResourcePeer.java:102)

   at ksa.om.DuplicateRecordManager.fetch(DuplicateRecordManager.java:51)

   at ksa.om.ResourcePeer.getResourceByValueOrNewRecord(ResourcePeer.java:79)

   at ksa.om.Feed.setLink(Feed.java:71)

   at ksa.robot.FeedTaskParserListener.onChannel(FeedTaskParserListener.java:180)

   at 
org.apache.commons.feedparser.RSSFeedParser.doParseChannel(RSSFeedParser.java:108)

   at org.apache.commons.feedparser.RSSFeedParser.parse(RSSFeedParser.java:63)

   at org.apache.commons.feedparser.FeedParser.parse(FeedParser.java:102)

   at org.apache.commons.feedparser.FeedParser.parse(FeedParser.java:61)

   at org.apache.commons.feedparser.FeedParser.parse(FeedParser.java:76)

   at ksa.robot.FeedTask.doFeedParse(FeedTask.java:449)

   at ksa.robot.FeedTask.doUpdate(FeedTask.java:395)

   at ksa.robot.FeedTask.run(FeedTask.java:170)

   at ksa.robot.TaskThread.doProcessTask(TaskThread.java:257)

   at ksa.robot.TaskThread.run(TaskThread.java:88)

-------------

References: 6

-------------

   at 
org.apache.commons.dbcp.datasources.SharedPoolDataSource.getPooledConnectionAndInfo(SharedPoolDataSource.java:155)

   - waiting to lock <0x49ed74d8> (a 
org.apache.commons.dbcp.datasources.SharedPoolDataSource)

   at 
org.apache.commons.dbcp.datasources.InstanceKeyDataSource.getConnection(InstanceKeyDataSource.java:631)

   at 
org.apache.commons.dbcp.datasources.InstanceKeyDataSource.getConnection(InstanceKeyDataSource.java:615)

   at org.apache.torque.Torque.getConnection(Torque.java:936)

   at org.apache.torque.Torque.getConnection(Torque.java:870)

   at ksa.om.BaseResourcePeer.doSelectPSLazy(BaseResourcePeer.java:1370)

   at ksa.om.BaseResourcePeer.doSelect(BaseResourcePeer.java:1103)

   at ksa.om.BaseResourcePeer.doSelectFirstRecord(BaseResourcePeer.java:1209)

   at ksa.om.BaseResourcePeer.retrieveByPK(BaseResourcePeer.java:833)

   at ksa.om.BaseResourcePeer.retrieveByPK(BaseResourcePeer.java:803)

   at ksa.om.BaseFeed.getResourceRelatedByResourceId(BaseFeed.java:3078)

   at ksa.om.Feed.getResource(Feed.java:55)

   at ksa.robot.FeedTask.run(FeedTask.java:168)

   at ksa.robot.TaskThread.doProcessTask(TaskThread.java:257)

   at ksa.robot.TaskThread.run(TaskThread.java:88)

-------------

References: 2

-------------

   at 
org.apache.commons.dbcp.datasources.SharedPoolDataSource.getPooledConnectionAndInfo(SharedPoolDataSource.java:155)

   - waiting to lock <0x49ed74d8> (a 
org.apache.commons.dbcp.datasources.SharedPoolDataSource)

   at 
org.apache.commons.dbcp.datasources.InstanceKeyDataSource.getConnection(InstanceKeyDataSource.java:631)

   at 
org.apache.commons.dbcp.datasources.InstanceKeyDataSource.getConnection(InstanceKeyDataSource.java:615)

   at org.apache.torque.Torque.getConnection(Torque.java:936)

   at ksa.om.BaseResourcePeer.retrieveByPK(BaseResourcePeer.java:802)

   at ksa.om.BaseWeblog.getResource(BaseWeblog.java:1284)

   at ksa.robot.ThumbnailTask.setWeblog(ThumbnailTask.java:75)

   at ksa.robot.ThumbnailQueue.visit(ThumbnailQueue.java:50)

   at ksa.robot.TaskThread.doProcessTask(TaskThread.java:256)

   at ksa.robot.TaskThread.run(TaskThread.java:88)

-------------

References: 1

-------------

   at 
org.apache.commons.dbcp.datasources.SharedPoolDataSource.getPooledConnectionAndInfo(SharedPoolDataSource.java:155)

   - waiting to lock <0x49ed74d8> (a 
org.apache.commons.dbcp.datasources.SharedPoolDataSource)

   at 
org.apache.commons.dbcp.datasources.InstanceKeyDataSource.getConnection(InstanceKeyDataSource.java:631)

   at 
org.apache.commons.dbcp.datasources.InstanceKeyDataSource.getConnection(InstanceKeyDataSource.java:615)

   at org.apache.torque.Torque.getConnection(Torque.java:936)

   at org.apache.torque.Torque.getConnection(Torque.java:870)

   at ksa.om.BaseArticlePeer.doSelectPSLazy(BaseArticlePeer.java:2075)

   at ksa.om.BaseArticlePeer.doSelect(BaseArticlePeer.java:1738)

   at ksa.om.ArticlePeer.getArticlesForArticleTask(ArticlePeer.java:269)

   at ksa.om.ArticlePeer.getArticlesForArticleTask(ArticlePeer.java:222)

   at ksa.robot.ArticleQueue.refresh(ArticleQueue.java:31)

   at ksa.robot.TaskQueue.getNextXToProcess(TaskQueue.java:67)

   - locked <0x4f9cdb00> (a ksa.robot.ArticleQueue)

   at ksa.robot.TaskThread.doProcessTask(TaskThread.java:252)

   at ksa.robot.TaskThread.run(TaskThread.java:88)

... any idea?

--

Please reply using PGP.

http://peerfear.org/pubkey.asc NewsMonster - http://www.newsmonster.org/
Kevin A. Burton, Location - San Francisco, CA, Cell - 415.595.9965
AIM/YIM - sfburtonator, Web - http://peerfear.org/
GPG fingerprint: 5FB2 F3E2 760E 70A8 6174 D393 E84D 8D04 99F1 4412
IRC - freenode.net #infoanarchy | #p2p-hackers | #newsmonster



--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]



Reply via email to