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.  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.

Almost all other threads are blocked waiting for the lock this thread
has on SharedPoolDataSource below

"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

Reply via email to