On 22/10/2010 15:42, Jason Britton wrote:
> Hi Chuck -
> How the application is doing its locking is definitely exacerbating
> the problem of the thread just sitting on that socket read to the
> database and never getting to release the lock, this is just one
> particular application out of two different tomcats that are locking
> up with same core issue.

Or maybe all of them with the same app will, under the right conditions.

> The second app also has a runnable thread
> hanging onto a lock with lots of other threads blocking waiting for
> that object.  This time the lock is not being made in our code but in
> DBCP code and it hangs on a socket read to the database as well never
> releasing it's locks.  Thread stacktrace from this thread below.  Our
> DBCP and Pool libs are out of date.  I'm hoping updating those libs
> will allow DBCP to better handle socket read hangups.  Still very
> concerned about why socket reads are hanging up to db bringing these
> locking issues to light.

As Mark said, there's synchronisation issues in older versions of
Commons DBCP.
 
> Almost all other threads are blocked waiting for the lock this thread
> has on SharedPoolDataSource below

A thought occurs: how are you validating the db connections?


p

> "catalina-exec-company1-2" daemon prio=10 tid=0x000000004bf5b800
> nid=0x41a2 runnable [0x0000000042be1000]
>    java.lang.Thread.State: RUNNABLE
>       at java.net.SocketInputStream.socketRead0(Native Method)
>       at java.net.SocketInputStream.read(SocketInputStream.java:129)
>       at oracle.net.ns.Packet.receive(Packet.java:293)
>       at oracle.net.ns.DataPacket.receive(DataPacket.java:92)
>       at oracle.net.ns.NetInputStream.getNextPacket(NetInputStream.java:174)
>       at oracle.net.ns.NetInputStream.read(NetInputStream.java:119)
>       at oracle.net.ns.NetInputStream.read(NetInputStream.java:94)
>       at oracle.net.ns.NetInputStream.read(NetInputStream.java:79)
>       at 
> oracle.jdbc.driver.T4CSocketInputStreamWrapper.readNextPacket(T4CSocketInputStreamWrapper.java:112)
>       at 
> oracle.jdbc.driver.T4CSocketInputStreamWrapper.read(T4CSocketInputStreamWrapper.java:73)
>       at oracle.jdbc.driver.T4CMAREngine.unmarshalUB1(T4CMAREngine.java:1040)
>       at oracle.jdbc.driver.T4CMAREngine.unmarshalSB1(T4CMAREngine.java:1016)
>       at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:588)
>       at oracle.jdbc.driver.T4CStatement.doOall8(T4CStatement.java:183)
>       at 
> oracle.jdbc.driver.T4CStatement.executeForDescribe(T4CStatement.java:780)
>       at 
> oracle.jdbc.driver.T4CStatement.executeMaybeDescribe(T4CStatement.java:855)
>       at 
> oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1187)
>       at 
> oracle.jdbc.driver.OracleStatement.executeQuery(OracleStatement.java:1378)
>       - locked <0x00002aaad1f64df8> (a oracle.jdbc.driver.T4CConnection)
>       at 
> oracle.jdbc.driver.OracleStatementWrapper.executeQuery(OracleStatementWrapper.java:387)
>       at 
> org.apache.commons.dbcp.datasources.KeyedCPDSConnectionFactory.validateObject(KeyedCPDSConnectionFactory.java:163)
>       at 
> org.apache.commons.pool.impl.GenericKeyedObjectPool.borrowObject(GenericKeyedObjectPool.java:837)
>       - locked <0x00002aaace878d18> (a
> org.apache.commons.pool.impl.GenericKeyedObjectPool)
>       at 
> org.apache.commons.dbcp.datasources.SharedPoolDataSource.getPooledConnectionAndInfo(SharedPoolDataSource.java:165)
>       - locked <0x00002aaaced306f8> (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 
> com.mycompany.db.ConnectionHandler.getConnection(ConnectionHandler.java:150)
>       at 
> com.mycompany.community.dataaccess.CustomerDAO.getBasicInfo(CustomerDAO.java:108)
>       at 
> com.mycompany.community.domain.CommunityUser.loadBasicInfo(CommunityUser.java:207)
>       at 
> com.mycompany.community.domain.CommunityUser.isRegisteredMember(CommunityUser.java:598)
>       at 
> org.apache.jsp.templates.home.leftnav_jsp._jspService(leftnav_jsp.java:626)
>       at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
>       at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
>       at 
> org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377)
>       at 
> org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
>       at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
>       at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
>       at 
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
>       at 
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>       at 
> org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:646)
>       at 
> org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:551)
>       at 
> org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:488)
>       at 
> org.apache.jasper.runtime.JspRuntimeLibrary.include(JspRuntimeLibrary.java:968)
>       at 
> org.apache.jsp.templates.home.home_005ftemplate_jsp._jspService(home_005ftemplate_jsp.java:149)
>       at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
>       at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
>       at 
> org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377)
>       at 
> org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
>       at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
>       at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
>       at 
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
>       at 
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>       at 
> org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:646)
>       at 
> org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:551)
>       at 
> org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:488)
>       at 
> com.mycompany.servlet.filters.NavigationFilter.retrieveTemplate(NavigationFilter.java:381)
>       at 
> com.mycompany.servlet.filters.NavigationFilter.doFilter(NavigationFilter.java:185)
>       at 
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
>       at 
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>       at 
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
>       at 
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
>       at 
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
>       at 
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
>       at 
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
>       at 
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
>       at 
> org.apache.coyote.ajp.AjpAprProcessor.process(AjpAprProcessor.java:427)
>       at 
> org.apache.coyote.ajp.AjpAprProtocol$AjpConnectionHandler.process(AjpAprProtocol.java:384)
>       at 
> org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2087)
>       at 
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
>       at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
>       at java.lang.Thread.run(Thread.java:619)
> 
> 
> 
> 
> 
> On Fri, Oct 22, 2010 at 6:34 AM, Caldarale, Charles R
> <chuck.caldar...@unisys.com> wrote:
>>
>> From: Jason Britton [mailto:jbritto...@gmail.com]
>>> Subject: Re: tomcat 6.0.29 hung
>>
>>
>>> My thoughts are this is the thread causing all the backup
>>> AJP Thread 1 RUNNABLE, sitting on socketRead0, Has locked
>>> <0x00002aaad303cad0> (a com.acompany.model.customer.CustomerData)
>>> which almost all other threads are blocked waiting for lock on
>>
>> Which means you have an extremely poor application design.  The webapp 
>> should never set a global lock and then make a database request.  Either the 
>> lock must be of much finer granularity, or not set until after the DB 
>> request is responded to.
>>
>>  - Chuck
>>
>>
>> THIS COMMUNICATION MAY CONTAIN CONFIDENTIAL AND/OR OTHERWISE PROPRIETARY 
>> MATERIAL and is thus for use only by the intended recipient. If you received 
>> this in error, please contact the sender and delete the e-mail and its 
>> attachments from all computers.
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
>> For additional commands, e-mail: users-h...@tomcat.apache.org
>>
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
> For additional commands, e-mail: users-h...@tomcat.apache.org
> 

Attachment: 0x62590808.asc
Description: application/pgp-keys

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to