-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Kaleb Pederson wrote: > Hello, > > I have an interesting problem. After a while, tomcat (5.0.27) becomes almost > completely non-responsive. If I telnet in to port 8009 (I'm using apache > and mod_jk2), I get no response, at least not within the default timeout. If > a browse to a page, I will generally, after about 4-5 minutes, see a page > returned. > > To narrow down the slowness, I generated a full thread dump, and found the > following information: > > [ see attachment for more info] > Total threads: 180 > executeQuery: 2 // executing a db query > validateConnection: 0 // trying to validate their connection > validateObect: 48 // in commons.dbcp.PoolableConnectionFactory.validateObject > socketAccept: 3 // accepting a socket > socketRead0: 10 // reading a socket > ReferenceQueue: 1 > ThreadPool$MonitorRunnable: 2 > borrowObject and Object.wait: 85 // trying to get an object from the pool > Object.wait: 20 // threads just waiting around > Remaining: 9 // misc. threads > > My database connection is setup so that I have 50 allowed connections, which > matches my 48 in validateObject and 2 executing queries. However, when I > query the database status, I see 2 active threads and the rest are > 'sleeping', just waiting around, as they would be if the connection pool > hadn't released them yet. > > So, why would there be 48 connections that seemed locked and weren't querying > the DB? And then the other 85 that were seemingly waiting on the 45? Any > ideas what might be going on? The DB is ready? I have log abandoned turned > and an haven't seen a problem yet. If the load drops sufficiently on the > server, everything eventually returns back to normal, otherwise it takes 5-10 > minutes to get a response from the server. > > I have attached an abbreviated form of the thread dump which should provide > all the critical information and can provide as much other information as is > necessary. > > Thanks for the help. *All* suggestions welcome ;) > > --Kaleb > > > ------------------------------------------------------------------------ > > Total threads: 180 > executeQuery: 2 > validateConnection: 0 > validateObect: 48 > socketAccept: 3 > socketRead0: 10 > ReferenceQueue: 1 > ThreadPool$MonitorRunnable: 2 > borrowObject and Object.wait: 85 > borrowObject: 0 > Object.wait: 20 > Remaining: 9 > *************************************************** > 2 like "TP-Processor296" daemon prio=1 tid=0x6ea04a90 nid=0x5e87 runnable > [738f6000..738f787c] > at java.net.SocketInputStream.socketRead0(Native Method) > at java.net.SocketInputStream.read(SocketInputStream.java:129) > at java.io.BufferedInputStream.fill(BufferedInputStream.java:183) > at java.io.BufferedInputStream.read1(BufferedInputStream.java:222) > at java.io.BufferedInputStream.read(BufferedInputStream.java:277) [snip]
Kaleb, Looks like you're using an old version of the JDBC driver that uses BufferedInputStreams by default. There is a 'feature' (many call a bug) in BufferedInputStreams that causes them in some cases to want to read a full buffer's worth of data when you're only asking for some portion of it...That's what's happening here. I'd try downloading something more recent for a JDBC driver (like Connector/J 3.0.15) and see where that gets you, to start with. -Mark - -- Mr. Mark Matthews MySQL AB, Software Development Manager, J2EE and Windows Platforms Office: +1 708 332 0507 www.mysql.com MySQL Guide to Lower TCO http://www.mysql.com/it-resources/white-papers/tco.php -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.3 (MingW32) Comment: Using GnuPG with Thunderbird - http://enigmail.mozdev.org iD8DBQFBY1AztvXNTca6JD8RAvEIAJ4p5Fi9QIwhNTlNslLMW6cKGhmUpgCeP2JJ RurwXfMfDzSEGTRLqssk4b4= =s3u9 -----END PGP SIGNATURE----- --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]