2016-05-20 5 views
0

мы начали сталкиваться с очень странным вопросом в последнее время на производстве, эта проблема не возникает только в понедельник между 8:30 AM 9:30 утро t0Нет доступных ManagedConnections

Подсчитайте inUseConnections идет стать 20 в кратчайших сроках и применение зависаний и мы должны очистить соединения, чтобы вернуть их к работе.

ошибка видели в журналах является:

2016-05-16 09:18:31,156 ERROR [org.hibernate.util.JDBCExceptionReporter] No ManagedConnections available within configured blocking timeout (30000 [ms]); - nested throwable: (javax.resource.ResourceException: No ManagedConnections available within configured blocking timeout (30000 [ms])) 
2016-05-16 09:18:31,156 INFO [org.hibernate.event.def.DefaultLoadEventListener] Error performing load command 
org.hibernate.exception.GenericJDBCException: Cannot open connection 
    at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:103) 
    at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:91) 
    at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43) 
    at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:29) 
    at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:426) 
    at org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:144) 
    at org.hibernate.jdbc.AbstractBatcher.prepareQueryStatement(AbstractBatcher.java:140) 
    at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1547) 
    at org.hibernate.loader.Loader.doQuery(Loader.java:673) 
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236) 
    at org.hibernate.loader.Loader.loadEntity(Loader.java:1860) 
    at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:48) 
    at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:42) 
    at org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:3048) 
    at org.hibernate.event.def.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:395) 
    at org.hibernate.event.def.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:375) 
    at org.hibernate.event.def.DefaultLoadEventListener.load(DefaultLoadEventListener.java:139) 
    at org.hibernate.event.def.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:195) 
    at org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:103) 
    at org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:878) 
    at org.hibernate.impl.SessionImpl.get(SessionImpl.java:815) 
    at org.hibernate.impl.SessionImpl.get(SessionImpl.java:808) 
    at org.hibernate.ejb.AbstractEntityManagerImpl.find(AbstractEntityManagerImpl.java:174) 
    at sun.reflect.GeneratedMethodAccessor205.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:357) 
    at $Proxy186.find(Unknown Source) 
    at sun.reflect.GeneratedMethodAccessor205.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:194) 
    at $Proxy186.find(Unknown Source) 
    at com.baad.merc.service.proposal.impl.ProposalServiceImpl.retrieveProposalSummary(ProposalServiceImpl.java:1050) 
    at com.baad.merc.service.proposal.impl.ProposalServiceImpl$$FastClassByCGLIB$$3c98e9c0.invoke(<generated>) 
    at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:149) 
    at org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:700) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149) 
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171) 
    at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:77) 
    at com.baad.merc.service.support.client.spring.aop.ServiceMethodAspect.serviceMethod(ServiceMethodAspect.java:41) 
    at sun.reflect.GeneratedMethodAccessor214.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:627) 
    at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:616) 
    at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:64) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171) 
    at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171) 
    at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:635) 
    at com.baad.merc.service.proposal.impl.ProposalServiceImpl$$EnhancerByCGLIB$$dfbf2a28.retrieveProposalSummary(<generated>) 
    at sun.reflect.GeneratedMethodAccessor297.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:310) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149) 
    at org.springframework.remoting.support.RemoteInvocationTraceInterceptor.invoke(RemoteInvocationTraceInterceptor.java:70) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171) 
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204) 
    at $Proxy198.retrieveProposalSummary(Unknown Source) 
    at sun.reflect.GeneratedMethodAccessor1303.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.springframework.remoting.support.RemoteInvocation.invoke(RemoteInvocation.java:205) 
    at org.springframework.remoting.support.DefaultRemoteInvocationExecutor.invoke(DefaultRemoteInvocationExecutor.java:38) 
    at org.springframework.remoting.support.RemoteInvocationBasedExporter.invoke(RemoteInvocationBasedExporter.java:78) 
    at org.springframework.remoting.support.RemoteInvocationBasedExporter.invokeAndCreateResult(RemoteInvocationBasedExporter.java:114) 
    at org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter.handleRequest(HttpInvokerServiceExporter.java:74) 
    at org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter.handle(HttpRequestHandlerAdapter.java:49) 
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:875) 
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:809) 
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:571) 
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:511) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:637) 
    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.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96) 
    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:230) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:173) 
    at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:182) 
    at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104) 
    at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:241) 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844) 
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) 
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447) 
    at java.lang.Thread.run(Thread.java:662) 
Caused by: org.jboss.util.NestedSQLException: No ManagedConnections available within configured blocking timeout (30000 [ms]); - nested throwable: (javax.resource.ResourceException: No ManagedConnections available within configured blocking timeout (30000 [ms])) 
    at org.jboss.resource.adapter.jdbc.WrapperDataSource.getConnection(WrapperDataSource.java:96) 
    at com.baad.merc.component.datasource.impl.DelegatingDataSource.getConnection(DelegatingDataSource.java:35) 
    at com.baad.merc.component.datasource.impl.TrackingDataSource.getConnection(TrackingDataSource.java:49) 
    at org.hibernate.ejb.connection.InjectedDataSourceConnectionProvider.getConnection(InjectedDataSourceConnectionProvider.java:47) 
    at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:423) 
    ... 91 more 
Caused by: javax.resource.ResourceException: No ManagedConnections available within configured blocking timeout (30000 [ms]) 
    at org.jboss.resource.connectionmanager.InternalManagedConnectionPool.getConnection(InternalManagedConnectionPool.java:301) 
    at org.jboss.resource.connectionmanager.JBossManagedConnectionPool$BasePool.getConnection(JBossManagedConnectionPool.java:538) 
    at org.jboss.resource.connectionmanager.BaseConnectionManager2.getManagedConnection(BaseConnectionManager2.java:348) 
    at org.jboss.resource.connectionmanager.TxConnectionManager.getManagedConnection(TxConnectionManager.java:330) 
    at org.jboss.resource.connectionmanager.BaseConnectionManager2.allocateConnection(BaseConnectionManager2.java:403) 
    at org.jboss.resource.connectionmanager.BaseConnectionManager2$ConnectionManagerProxy.allocateConnection(BaseConnectionManager2.java:850) 
    at org.jboss.resource.adapter.jdbc.WrapperDataSource.getConnection(WrapperDataSource.java:90) 
    ... 95 more 

Не могли бы вы помочь мне понять, что может быть причиной этого и как это может быть решена.

Заранее спасибо.

Примечание: мы еще не видели эту проблему в нашем приложении, она работает отлично в течение многих лет, все соединения в приложении закрываются должным образом.

ответ

1

Ну, его трудно указать точную причину, не зная ваших деловых потоков.

Я думаю, что если у вас заканчиваются доступные соединения, очевидно, кто-то их поглощает.

В общем случае это может быть:

Вариант 1: Тот же самый код, называемый одновременно. Например, в прилагаемой стопке я вижу

com.baad.merc.service.proposal.impl.ProposalServiceImpl.retrieveProposalSummary(ProposalServiceImpl.java:1050) 

Я бы это сделал, поставив счетчик/метрику. Поскольку вы используете AOP, его не должно быть сложно реализовать в качестве аспекта или чего-то еще.

Вариант 2: Слишком много пользователей, использующих ваше приложение в этот период времени, поэтому выполняют свои запросы. Это также можно отслеживать следующим образом: когда вы достигаете, скажем, 19 соединений (снова вы можете использовать счетчик для измерения этого) - просто создайте дамп потока программным способом и сохраните его в некотором месте в файловой системе. Таким образом, вы сможете отслеживать поток, который фактически вызвал эту ситуацию. Точно так же это может быть даже некоторая внутренняя деятельность, например, запланированная работа или что-то еще.

Надеется, что это помогает

+0

Спасибо Марку за ответ, мы уже разместили скрипт на месте, чтобы нить дампов когда соединения начинают увеличиваться, и это не помогло, как причина ошибки не всегда то же самое (не всегда retrieveProposalSummary метод вызывает это). скажем, это вызвано no. вы думаете, что увеличение количества подключений на 5 в ds-файле поможет? – Amit

+0

Это своего рода номер взлома. Если у вас есть 20 пользователей, работающих одновременно, возможно, что завтра 25 пользователей будут подключаться и потреблять соединения db. Конечно, если это может быть временное решение, но я бы подумал о будущем. Возможно, вы можете оптимизировать запрос, чтобы доступ к БД не длился так долго, поэтому вероятность занять соединения уменьшится. Возможно, стоит поставить запросы db в какую-то очередь. Чтобы они обрабатывались асинхронно. Возможно, вам стоит рассмотреть возможность использования асинхронного ввода-вывода на веб-уровне. На самом деле доступно множество опций. Надеюсь, это поможет –