Oops.  Stupid user error.   My thread dumper method was dumping each
thread trace as many times as there were lines in the thread trace.
So a 65-line trace created 65 copies...   What a mess I've made.

On Fri, Jul 31, 2015 at 5:01 PM, Mike Kienenberger <mkien...@gmail.com> wrote:
> ]
> So I'm reviewing a dump of the threads when I run out of connections
> in my connection pool, and I think I've found the problem.
>
> I don't understand what's going on.  While the oracle driver is
> reading data, some kind of thread wrapper
> [org.apache.tomcat.util.threads.TaskThread$WrappingRunnable] inside of
> tomcat is triggered, and this re-executes the entire servlet stack
> again.   It almost seems as if the oracle connection to the database
> is hitting the tomcat server instead of the database.
>
> This is not the only thread displaying this behaviour.   The entire
> thread dump was 100,000 lines and this thread dump was only 4300 lines
> long, so it's a mind-boggling amount of data to sift through.
>
> Here's the start...
>
> [...]
>     at 
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
>     at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
>     at 
> org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
>     at java.lang.Thread.run(Thread.java:745)
> [repeats at least 65 more times...]
> [And here we start repeating again...^^^^....]
>     at java.net.SocketInputStream.socketRead0(Native Method)
>     at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
>     at java.net.SocketInputStream.read(SocketInputStream.java:170)
>     at java.net.SocketInputStream.read(SocketInputStream.java:141)
>     at oracle.net.ns.Packet.receive(Packet.java:300)
>     at oracle.net.ns.DataPacket.receive(DataPacket.java:106)
>     at oracle.net.ns.NetInputStream.getNextPacket(NetInputStream.java:315)
>     at oracle.net.ns.NetInputStream.read(NetInputStream.java:260)
>     at oracle.net.ns.NetInputStream.read(NetInputStream.java:185)
>     at oracle.net.ns.NetInputStream.read(NetInputStream.java:102)
>     at 
> oracle.jdbc.driver.T4CSocketInputStreamWrapper.readNextPacket(T4CSocketInputStreamWrapper.java:124)
>     at 
> oracle.jdbc.driver.T4CSocketInputStreamWrapper.read(T4CSocketInputStreamWrapper.java:80)
>     at oracle.jdbc.driver.T4CMAREngine.unmarshalUB1(T4CMAREngine.java:1137)
>     at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:290)
>     at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:192)
>     at oracle.jdbc.driver.T4C7Ocommoncall.doOCOMMIT(T4C7Ocommoncall.java:75)
>     at oracle.jdbc.driver.T4CConnection.doCommit(T4CConnection.java:617)
>     at 
> oracle.jdbc.driver.PhysicalConnection.commit(PhysicalConnection.java:3901)
>     at 
> oracle.jdbc.driver.PhysicalConnection.commit(PhysicalConnection.java:3907)
>     at 
> org.apache.cayenne.conn.ConnectionWrapper.commit(ConnectionWrapper.java:136)
>     at 
> org.apache.cayenne.access.InternalTransaction.processCommit(InternalTransaction.java:73)
>     at 
> org.apache.cayenne.access.ExternalTransaction.commit(ExternalTransaction.java:97)
>     at 
> org.apache.cayenne.access.DataDomain.runInTransaction(DataDomain.java:878)
>     at 
> org.apache.cayenne.access.DataDomain.onSyncNoFilters(DataDomain.java:814)
>     at 
> org.apache.cayenne.access.DataDomain$DataDomainSyncFilterChain.onSync(DataDomain.java:1031)
>     at org.apache.cayenne.access.DataDomain.onSync(DataDomain.java:785)
>     at 
> org.apache.cayenne.access.DataContext.flushToParent(DataContext.java:817)
>     at 
> org.apache.cayenne.access.DataContext.commitChanges(DataContext.java:756)
>     at 
> com.gvea.applications.epay.cayenne.BaseDAOCayenne.update(BaseDAOCayenne.java:338)
>     at 
> com.gvea.applications.epay.cayenne.EbppDAOCayenne.update(EbppDAOCayenne.java:84)
>     at 
> com.gvea.ebpp.business.CayennePageStateLogger.log(CayennePageStateLogger.java:42)
>     at 
> com.gvea.struts.ebpp.framework.Application.onDoRequest(Application.java:302)
>     at 
> com.gvea.servlet.pageStateCache.PageStateManager.onDoRequest(PageStateManager.java:648)
>     at 
> com.gvea.servlet.pageStateCache.PageStateCacheServlet.doRequest(PageStateCacheServlet.java:174)
>     at 
> com.gvea.servlet.pageStateCache.PageStateCacheServlet.doPost(PageStateCacheServlet.java:131)
>     at javax.servlet.http.HttpServlet.service(HttpServlet.java:648)
>     at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
>     at 
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291)
>     at 
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>     at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
>     at 
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
>     at 
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>     at com.gvea.servlet.filter.LoggingFilter.doFilter(LoggingFilter.java:66)
>     at 
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
>     at 
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>     at 
> fr.xebia.servlet.filter.XForwardedFilter.doFilter(XForwardedFilter.java:899)
>     at 
> fr.xebia.servlet.filter.XForwardedFilter.doFilter(XForwardedFilter.java:915)
>     at 
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
>     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:106)
>     at 
> org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
>     at 
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142)
>     at 
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
>     at 
> org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610)
>     at 
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
>     at 
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:518)
>     at 
> org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1091)
>     at 
> org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:668)
>     at 
> org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:223)
>     at 
> org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1517)
>     at 
> org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1474)
>     at 
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
>     at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
>     at 
> org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
>     at java.lang.Thread.run(Thread.java:745)
>
> [Start of the thread above]
>
>
> On Fri, Jun 12, 2015 at 11:21 AM, Mike Kienenberger <mkien...@gmail.com> 
> wrote:
>> Hmm.   I just remembered that I have a second infrequently-accessed
>> database which is also configured.
>>
>> So I'd really have 3 runtimes * 2 connection pools, so that explains 6 of 
>> the 8.
>>
>> Not sure where the other two are from unless I have a 4th runtime that
>> I've overlooked.
>>
>>
>> On Cayenne 4, yes, that's one of my goals this summer -- upgrade to
>> Cayenne 4.  Probably won't happen until July, though.
>>
>>
>> I'm going to add something that will dump all threads when this
>> exception is hit.
>>
>> On Fri, Jun 12, 2015 at 11:15 AM, Andrus Adamchik
>> <and...@objectstyle.org> wrote:
>>>
>>>> On Jun 12, 2015, at 6:09 PM, Mike Kienenberger <mkien...@gmail.com> wrote:
>>>>
>>>> And, interestingly enough, I only have 8 "PoolManagerCleanup" threads,
>>>> and not the 9 that I expected.  Maybe they are create-on-demand and
>>>> one of my runtimes hasn't needed it yet?
>>>
>>> There should be 3 actually. One per PoolManager, not one per connection. So 
>>> something may be going on there.
>>>
>>> FWIW 4.0.M3 (master branch) has a completely new non-blocking alternative 
>>> to PoolManager. The cleanup process is also more sane there.
>>>
>>> Andrus
>>>

Reply via email to