> From: Christopher Schultz [mailto:ch...@christopherschultz.net]
> Sent: Tuesday, January 13, 2015 1:05 PM
> To: Tomcat Users List
> Subject: Re: Occasional long wait for a JDBC connection
>
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA256
>
> Darren,
>
> On 1/13/15 11:49 AM, Darren Davis wrote:
> > The problem occurred again this morning.  I was able to generate a
> > thread dump and narrow down the source of our problem to tomcat
> thread
> > 23.
> >
> >> From 8:45:51,397 to 09:01:19,083, it was stuck in the validate check
> >> for a
> > newly instantiated connection:
> >
> > I ran the thread dump several times during this interval, and the
> > stack trace for thread 23 did not change at all.
> >
> > I did check our database log file and determined that during the 8
> > hours that led up to our first error on the server yesterday, we had
> > just a total of 12 unique connections.  The problem occurred the the
> > creation of connection # 13, which was then used several other times
> > later.
> >
> > The incident this morning also coincided with creating a new
> > connection in the pool.  It does not make any sense that the simple
> > validation query of "SELECT 1" would require a wait of 15 minutes to
> > succeed.
>
> Agreed.
>
> > It's also strange that this only happens sporadically, and not every
> > time a new connection is being "birthed" by the system.
> >
> > We've tried two different pooling technologies: DBCP and the new
> > Apache JDBC pooling on this server and both exhibit the same 15 minute
> > occasional wait.
>
> The problem is with the driver and/or database, not with the connection
> pool. It's not surprising that you are experiencing problems regardless of the
> pool being used.
>
> > we've come across documentation that suggests we could modify our
> > validation statement by prefixing it with /* ping */, which we're
> > thinking about trying
>
> Using "/* ping */" is usually a good idea for MySQL, but it may mask the
> problem. What you may find is that the next "real" query you use hangs for
> 15 minutes. If you are going to use /* ping */ and you are going to use the
> tomcat-jdbc pool, then you may as well not configure a validation query at all
> because Tomcat's pool will use Connection.isValid which amounts to the
> same thing (and will work for any compliant JDBC driver, not just with
> MySQL).
>
> > "http-nio-8443-exec-23" #156 daemon prio=5 os_prio=0
> > tid=0x00007f0658387000 nid=0x7a60 runnable [0x00007f05e7466000]
> > java.lang.Thread.State: RUNNABLE at
> > java.net.SocketInputStream.$$YJP$$socketRead0(Native Method) at
> > java.net.SocketInputStream.socketRead0(SocketInputStream.java) at
> > java.net.SocketInputStream.read(SocketInputStream.java:150) at
> > java.net.SocketInputStream.read(SocketInputStream.java:121) at
> >
> com.mysql.jdbc.util.ReadAheadInputStream.fill(ReadAheadInputStream.jav
> > a:114)
> >
> >
> at
> >
> com.mysql.jdbc.util.ReadAheadInputStream.readFromUnderlyingStreamIfN
> ec
> > essary(ReadAheadInputStream.java:161)
> >
> >
> at
> >
> com.mysql.jdbc.util.ReadAheadInputStream.read(ReadAheadInputStream.j
> av
> > a:189)
> >
> >
> - - locked <0x00000000bdf09420> (a
> > com.mysql.jdbc.util.ReadAheadInputStream) at
> > com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:2549) at
> > com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3002) at
> > com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2991) at
> > com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3532) at
> > com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2002) at
> > com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2163) at
> > com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2618) -
> > locked <0x00000000bdf04df0> (a com.mysql.jdbc.JDBC4Connection) at
> > com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2568) at
> > com.mysql.jdbc.StatementImpl.execute(StatementImpl.java:842) - locked
> > <0x00000000bdf04df0> (a com.mysql.jdbc.JDBC4Connection) - locked
> > <0x00000000ff107cd8> (a com.mysql.jdbc.StatementImpl) at
> > com.mysql.jdbc.StatementImpl.execute(StatementImpl.java:681) at
> >
> org.apache.tomcat.jdbc.pool.PooledConnection.validate(PooledConnection
> > .java:503)
> >
> >
> at
> >
> org.apache.tomcat.jdbc.pool.PooledConnection.validate(PooledConnection
> > .java:437)
> >
> >
> at
> >
> org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(Connectio
> n
> > Pool.java:763)
> >
> >
> at
> >
> org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(Connectio
> n
> > Pool.java:617)
> >
> >
> at
> >
> org.apache.tomcat.jdbc.pool.ConnectionPool.getConnection(ConnectionPoo
> > l.java:186)
> >
> >
> at
> >
> org.apache.tomcat.jdbc.pool.DataSourceProxy.getConnection(DataSourcePr
> > oxy.java:127)
> >
> >
> at
> >
> org.springframework.orm.hibernate3.LocalDataSourceConnectionProvider.g
> > etConnection(LocalDataSourceConnectionProvider.java:83)
> >
> >
> at
> >
> org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManag
> er.
> > java:446)
> >
> >
> at
> >
> org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager
> .j
> > ava:167)
> >
> >
> at org.hibernate.jdbc.JDBCContext.connection(JDBCContext.java:160)
> > at
> > org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:8
> > 1)
> >
> >
> at
> > org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1473)
> >
> >
> at
> >
> org.springframework.orm.hibernate3.HibernateTransactionManager.doBegi
> n
> > (HibernateTransactionManager.java:556)
> >
> >
> at
> > org.springframework.transaction.support.AbstractPlatformTransactionMan
> > ager.handleExistingTransaction(AbstractPlatformTransactionManager.java
> > :424)
> >
> >
> at
> > org.springframework.transaction.support.AbstractPlatformTransactionMan
> > ager.getTransaction(AbstractPlatformTransactionManager.java:348)
> >
> >
> at
> > org.springframework.transaction.interceptor.TransactionAspectSupport.c
> > reateTransactionIfNecessary(TransactionAspectSupport.java:417)
> >
> >
> at
> > org.springframework.transaction.interceptor.TransactionAspectSupport.i
> > nvokeWithinTransaction(TransactionAspectSupport.java:255)
> >
> >
> at
> > org.springframework.transaction.interceptor.TransactionInterceptor.inv
> > oke(TransactionInterceptor.java:94)
> >
> >
> at
> >
> org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(
> R
> > eflectiveMethodInvocation.java:172)
> >
> >
> at
> >
> org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDyna
> mic
> > AopProxy.java:204)
> >
> >
> at com.sun.proxy.$Proxy77.findOrCreateSystemTask(Unknown Source)
> > at
> > com.tracom.max.service.impl.SynchronizationServiceImpl.findOrCreateSys
> > temTask(SynchronizationServiceImpl.java:115)
> >
> >
> - - locked <0x00000000a45652b8> (a
> > com.tracom.max.service.impl.SynchronizationServiceImpl) at
> > com.tracom.max.service.impl.SessionServiceImpl.processRaterInvitation(
> > SessionServiceImpl.java:1767)
> >
> >
> at
> > com.tracom.max.service.impl.SessionServiceImpl.addRaterToSession(Sessi
> > onServiceImpl.java:1697)
> >
> >
> at sun.reflect.GeneratedMethodAccessor566.invoke(Unknown Source)
> > at
> >
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
> s
> > orImpl.java:43)
> >
> >
> at java.lang.reflect.Method.invoke(Method.java:483)
> > at
> > org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflectio
> > n(AopUtils.java:317)
> >
> >
> at
> >
> org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoi
> > npoint(ReflectiveMethodInvocation.java:183)
> >
> >
> at
> >
> org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(
> R
> > eflectiveMethodInvocation.java:150)
> >
> >
> at
> > org.springframework.transaction.interceptor.TransactionInterceptor$1.p
> > roceedWithInvocation(TransactionInterceptor.java:96)
> >
> >
> at
> > org.springframework.transaction.interceptor.TransactionAspectSupport.i
> > nvokeWithinTransaction(TransactionAspectSupport.java:260)
> >
> >
> at
> > org.springframework.transaction.interceptor.TransactionInterceptor.inv
> > oke(TransactionInterceptor.java:94)
> >
> >
> at
> >
> org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(
> R
> > eflectiveMethodInvocation.java:172)
> >
> >
> at
> >
> org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDyna
> mic
> > AopProxy.java:204)
> >
> >
> at com.sun.proxy.$Proxy64.addRaterToSession(Unknown Source)
> > at
> > com.tracom.tracomlearning.controller.InviteRaterController.processInvi
> > teRater(InviteRaterController.java:461)
> >
> >
> at sun.reflect.GeneratedMethodAccessor565.invoke(Unknown Source)
> > at
> >
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
> s
> > orImpl.java:43)
> >
> >
> at java.lang.reflect.Method.invoke(Method.java:483)
> > at
> >
> org.springframework.web.method.support.InvocableHandlerMethod.invok
> e(I
> > nvocableHandlerMethod.java:215)
> >
> >
> at
> >
> org.springframework.web.method.support.InvocableHandlerMethod.invok
> eFo
> > rRequest(InvocableHandlerMethod.java:132)
> >
> >
> at
> >
> org.springframework.web.servlet.mvc.method.annotation.ServletInvocable
> >
> HandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104
> )
> >
> >
> at
> >
> org.springframework.web.servlet.mvc.method.annotation.RequestMapping
> Ha
> >
> ndlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:7
> 45)
> >
> >
> at
> >
> org.springframework.web.servlet.mvc.method.annotation.RequestMapping
> Ha
> > ndlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:685)
> >
> >
> at
> >
> org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAda
> pte
> > r.handle(AbstractHandlerMethodAdapter.java:80)
> >
> >
> at
> > org.springframework.web.servlet.DispatcherServlet.doDispatch(Dispatche
> > rServlet.java:919)
> >
> >
> at
> > org.springframework.web.servlet.DispatcherServlet.doService(Dispatcher
> > Servlet.java:851)
> >
> >
> at
> >
> org.springframework.web.servlet.FrameworkServlet.processRequest(Frame
> w
> > orkServlet.java:953)
> >
> >
> at
> >
> org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkSer
> vl
> > et.java:855)
> >
> >
> at javax.servlet.http.HttpServlet.service(HttpServlet.java:644)
> > at
> >
> org.springframework.web.servlet.FrameworkServlet.service(FrameworkSer
> v
> > let.java:829)
> >
> >
> at javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
> > at
> > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appli
> > cationFilterChain.java:291)
> >
> >
> at
> > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFi
> > lterChain.java:206)
> >
> >
> at
> > org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
> >
> >
> at
> > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appli
> > cationFilterChain.java:239)
> >
> >
> at
> > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFi
> > lterChain.java:206)
> >
> >
> at
> > com.tracom.tracomlearning.utils.XSSFilter.doFilterInternal(XSSFilter.j
> > ava:33)
> >
> >
> at
> > org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRe
> > questFilter.java:106)
> >
> >
> at
> > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appli
> > cationFilterChain.java:239)
> >
> >
> at
> > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFi
> > lterChain.java:206)
> >
> >
> at
> > org.springframework.security.web.FilterChainProxy$VirtualFilterChain.d
> > oFilter(FilterChainProxy.java:330)
> >
> >
> at
> > org.springframework.security.web.access.intercept.FilterSecurityInterc
> > eptor.invoke(FilterSecurityInterceptor.java:118)
> >
> >
> at
> > org.springframework.security.web.access.intercept.FilterSecurityInterc
> > eptor.doFilter(FilterSecurityInterceptor.java:84)
> >
> >
> at
> > org.springframework.security.web.FilterChainProxy$VirtualFilterChain.d
> > oFilter(FilterChainProxy.java:342)
> >
> >
> at
> > org.springframework.security.web.access.ExceptionTranslationFilter.doF
> > ilter(ExceptionTranslationFilter.java:113)
> >
> >
> at
> > org.springframework.security.web.FilterChainProxy$VirtualFilterChain.d
> > oFilter(FilterChainProxy.java:342)
> >
> >
> at
> > org.springframework.security.web.session.SessionManagementFilter.doFil
> > ter(SessionManagementFilter.java:103)
> >
> >
> at
> > org.springframework.security.web.FilterChainProxy$VirtualFilterChain.d
> > oFilter(FilterChainProxy.java:342)
> >
> >
> at
> >
> org.springframework.security.web.authentication.AnonymousAuthenticatio
> > nFilter.doFilter(AnonymousAuthenticationFilter.java:113)
> >
> >
> at
> > org.springframework.security.web.FilterChainProxy$VirtualFilterChain.d
> > oFilter(FilterChainProxy.java:342)
> >
> >
> at
> > org.springframework.security.web.servletapi.SecurityContextHolderAware
> > RequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54
> > )
> >
> >
> at
> > org.springframework.security.web.FilterChainProxy$VirtualFilterChain.d
> > oFilter(FilterChainProxy.java:342)
> >
> >
> at
> >
> org.springframework.security.web.savedrequest.RequestCacheAwareFilter.
> > doFilter(RequestCacheAwareFilter.java:45)
> >
> >
> at
> > org.springframework.security.web.FilterChainProxy$VirtualFilterChain.d
> > oFilter(FilterChainProxy.java:342)
> >
> >
> at
> > org.springframework.security.web.authentication.www.BasicAuthenticatio
> > nFilter.doFilter(BasicAuthenticationFilter.java:150)
> >
> >
> at
> > org.springframework.security.web.FilterChainProxy$VirtualFilterChain.d
> > oFilter(FilterChainProxy.java:342)
> >
> >
> at
> > org.springframework.security.web.authentication.AbstractAuthentication
> > ProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:
> > 183)
> >
> >
> at
> > org.springframework.security.web.FilterChainProxy$VirtualFilterChain.d
> > oFilter(FilterChainProxy.java:342)
> >
> >
> at
> > org.springframework.security.web.authentication.logout.LogoutFilter.do
> > Filter(LogoutFilter.java:105)
> >
> >
> at
> > org.springframework.security.web.FilterChainProxy$VirtualFilterChain.d
> > oFilter(FilterChainProxy.java:342)
> >
> >
> at
> > org.springframework.security.web.context.SecurityContextPersistenceFil
> > ter.doFilter(SecurityContextPersistenceFilter.java:87)
> >
> >
> at
> > org.springframework.security.web.FilterChainProxy$VirtualFilterChain.d
> > oFilter(FilterChainProxy.java:342)
> >
> >
> at
> > org.springframework.security.web.FilterChainProxy.doFilterInternal(Fil
> > terChainProxy.java:192)
> >
> >
> at
> > org.springframework.security.web.FilterChainProxy.doFilter(FilterChain
> > Proxy.java:160)
> >
> >
> at
> > org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(De
> > legatingFilterProxy.java:343)
> >
> >
> at
> > org.springframework.web.filter.DelegatingFilterProxy.doFilter(Delegati
> > ngFilterProxy.java:260)
> >
> >
> at
> > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appli
> > cationFilterChain.java:239)
> >
> >
> at
> > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFi
> > lterChain.java:206)
> >
> >
> at
> > org.springframework.web.filter.CharacterEncodingFilter.doFilterInterna
> > l(CharacterEncodingFilter.java:88)
> >
> >
> at
> > org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRe
> > questFilter.java:106)
> >
> >
> at
> > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appli
> > cationFilterChain.java:239)
> >
> >
> at
> > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFi
> > lterChain.java:206)
> >
> >
> at
> >
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperV
> a
> > lve.java:219)
> >
> >
> at
> >
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextVa
> > lve.java:106)
> >
> >
> at
> > org.apache.catalina.authenticator.AuthenticatorBase.invoke(Authenticat
> > orBase.java:506)
> >
> >
> at
> > org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.ja
> > va:142)
> >
> >
> at
> > org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.ja
> > va:79)
> >
> >
> at
> > org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAcces
> > sLogValve.java:610)
> >
> >
> at
> > org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValv
> > e.java:88)
> >
> >
> at
> > org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java
> > :537)
> >
> >
> at
> > org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp1
> > 1Processor.java:1081)
> >
> >
> at
> >
> org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(A
> > bstractProtocol.java:658)
> >
> >
> at
> >
> org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.pro
> > cess(Http11NioProtocol.java:222)
> >
> >
> at
> >
> org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoi
> > nt.java:1566)
> >
> >
> at
> > org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint
> > .java:1523)
> >
> >
> - - locked <0x00000000fecbac90> (a
> > org.apache.tomcat.util.net.SecureNioChannel) at
> > java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.j
> > ava:1142)
> >
> >
> at
> > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.
> > java:617)
> >
> >
> at
> >
> org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThr
> > ead.java:61)
> >
> >
> at java.lang.Thread.run(Thread.java:745)
>
> Is it possible to rule-out any network problems? Is there any pattern at all 
> to
> the pauses?
>
> - -chris
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1
> Comment: GPGTools - http://gpgtools.org
>
> iQIcBAEBCAAGBQJUtV5CAAoJEBzwKT+lPKRYpOgP/RNMzeCZf1NdihufZvs26a
> s6
> AfvsJik+W7w5FPh6McxF+fIv14KMCftxV+gthoFi6M5XemQndBmt/iWiCfA5DEi
> E
> QeLM8uY3HNP6gWJbpNvyV+TLu87+TVusJG/7QjNi+FvdBdWalwnBQ658P/jU
> gITr
> VVkheN2RHzTtgCLTAjcah9eAibeGV8sr/5jikeuVGCxj7JdGwkxuJBAtT7XNc6VY
> oF0N0SmsLCukEWPzNuc5dhLFMhiNnbBEnRvIuLyCyG5i/CaPvDzJnaxBEZcyXC
> P/
> /BLvwIzOeb22Sx9l1NVU3CLogaLW+UYjraD9FMcADG7KIZn5NFxLpCbdkjOdYq
> Yw
> yLb+mNH31JSoRJErb2cfJzu+JYQYKDCa+5eIcQrDZ561gGDd5oDQBdW/0hQADf
> mF
> D4NGc1epCiFh3Fbx26ti1h5gYrZO1GVBlpU6JESaIPUBCEDO0stbGx9avPxlrr0k
> szLTWvigz7YOFKhdgVuXdXogxQdEcbICGUDrPOhOLQJJN4+RAuqZI1xSQPH+
> M0cQ
> WSgl7vNZT1R66aa3doYtmFdypSPGCIrJ24vz4cuOtiRvADW7hca5X5D+tig1/7EL
> 38mzJ/5U7p90kxTzPe1UYQEu3rv5EG10ER8VLuVUUl0lIByhx6lZuluc038dD+4i
> o0YGlRfVHb4I3YmZyQk6
> =/ayz
> -----END PGP SIGNATURE-----
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
> For additional commands, e-mail: users-h...@tomcat.apache.org
>


 There are numerous MySQL/Connector J bugs that are related to the stacktrace 
you sent, and more or less match the symptoms you are seeing, most around 
incorrect threading.    See #9515, #24995, #56411, #74979.

Reply via email to