2017-12-19 9 views
0

Wir haben eine Standortdienstanwendung, die ortsbezogene Informationen zu unseren anderen Anwendungen aus der MySQL-Datenbank bereitstellt. Aus irgendeinem Grund kann der Standortdienst keine Verbindung zur MySQL-Datenbank herstellen, wenn mehrere Anforderungen empfangen werden. Wir haben festgestellt, dass er bei einer fortlaufenden 15-20-Anforderung gleichzeitig fehlschlägt. Die folgenden Snippets sind der MySQL-Konfigurationscode und der Fehler-Stack.Hikari CP Verbindungsfehler

[email protected](name = "locationDataSource") 
public HikariDataSource getDataSource(@Value("${projectxx.mysql.location.url}") String url, 
     @Value("${projectxx.mysql.location.username}") String username, 
     @Value("${projectxx.mysql.location.password}") String password) { 


    HikariConfig config = new HikariConfig(); 
    config.setJdbcUrl(url); 
    config.setUsername(username); 
    config.setPassword(password); 
    config.setDriverClassName("com.mysql.jdbc.Driver"); 
    config.setMaximumPoolSize(45); 
    config.setPoolName("locationDBpool"); 
    config.setMinimumIdle(15); 

    config.addDataSourceProperty("cachePrepStmts", "true"); 
    config.addDataSourceProperty("prepStmtCacheSize", "250"); 
    config.addDataSourceProperty("prepStmtCacheSqlLimit", "2048"); 

    return new HikariDataSource(config); 

} 

@Bean(name = "locationSession") 
@Qualifier("locationDataSource") 
public SessionFactory getSessionFactoryBean(@Autowired(required = true) HikariDataSource dataSource) { 

    LocalSessionFactoryBean sessionFacBean = new LocalSessionFactoryBean(); 
    sessionFacBean.setDataSource(dataSource); 
    sessionFacBean.setPackagesToScan("com.projectxxx.dao"); 
    Properties hibernateProperties = new Properties(); 
    hibernateProperties.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQLDialect"); 
    sessionFacBean.setHibernateProperties(hibernateProperties); 
    try { 
     sessionFacBean.afterPropertiesSet(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    return sessionFacBean.getObject(); 

} 

java.sql.SQLTransientConnectionException: locationDBpool - Anschluss nicht verfügbar ist, Zeitüberschreitung der Anforderung nach 30000ms. bei com.zaxxer.hikari.pool.HikariPool.createTimeoutException (HikariPool.java:666) ~ [HikariCP-2.7.4.jar: na] bei com.zaxxer.hikari.pool.HikariPool.getConnection (HikariPool.java: 182) ~ [HikariCP-2.7.4.jar: na] bei com.zaxxer.hikari.pool.HikariPool.getConnection (HikariPool.java:147) ~ [HikariCP-2.7.4.jar: na] bei com. zaxxer.hikari.HikariDataSource.getConnection (HikariDataSource.java:85) ~ [HikariCP-2.7.4.jar: na] bei org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection (DatasourceConnectionProviderImpl.java:122) ~ [hibernate-core-5.0.12.Final.jar: 5.0.12.Final] bei org.hibernate.internal.AbstractSessionImpl $ NonContextualJdbcConnectionAccess.obtainConnection (AbstractSessionImpl.java:386) ~ [hibernate-core-5.0.12. Final.jar: 5.0.12.Final] um org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.acquireConnectionIfNeeded (LogicalConnectionManagedImpl.java:87) ~ [Hibernate-Core-5.0.12.Final.jar: 5.0.12.Final] bei org.hibernate.resource.jdbc. internal.LogicalConnectionManagedImpl.getPhysicalConnection (LogicalConnectionManagedImpl.java:112) ~ [Hibernate-Core-5.0.12.Final.jar: 5.0.12.Final] bei org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.getConnectionForTransactionManagement (LogicalConnectionManagedImpl. Java: 230) ~ [Hibernate-Core-5.0.12.Final.jar: 5.0.12.Final] bei org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.begin (LogicalConnectionManagedImpl.java:237) ~ [Winterschlaf- core-5.0.12.Final.jar: 5.0.12.Final] bei org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl $ TransactionDriverControlImpl.begin (JdbcResourceLocal TransactionCoordinatorImpl.java:214) ~ [Hibernate-Core-5.0.12.Final.jar: 5.0.12.Final] bei org.hibernate.engine.transaction.internal.TransactionImpl.begin (TransactionImpl.java:52) ~ [ hibernate-core-5.0.12.Final.jar: 5.0.12.Final] bei org.hibernate.internal.SessionImpl.beginTransaction (SessionImpl.java:1512) ~ [hibernate-core-5.0.12.Final.jar: 5.0.12.Final] unter com.projectxxx.actionImpl.LocationManagementImpl.findAddressByPostalCode (LocationManagementImpl.java:40) ~ [Klassen /: na] unter com.projectxxx.controller.LocationReadController.service3 (LocationReadController.java:40) ~ [classes /: na] bei sun.reflect.GeneratedMethodAccessor51.invoke (Unbekannte Quelle) ~ [na: na] bei sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) ~ [na: 1.8.0_131] bei java.l ang.reflect.Method.invoke (Methode.java:498) ~ [na: 1.8.0_131] unter org.springframework.web.method.support.InvocableHandlerMethod.doInvoke (InvocableHandlerMethod.java:205) ~ [spring-web- 4.3.12.RELEASE.jar: 4.3.12.RELEASE] unter org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest (InvocableHandlerMethod.java:133) ~ [spring-web-4.3.12.RELEASE.jar: 4.3.12.RELEASE] bei org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle (ServletInvocableHandlerMethod.java:97) ~ [spring-webmvc-4.3.12.RELEASE.jar: 4.3.12. RELEASE] bei org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod (RequestMappingHandlerAdapter.java:827) ~ [spring-webmvc-4.3.12.RELEASE.jar: 4.3.12.RELEASE] um org.springframework.web.servlet.mvc.method.annotation.RequestMappi ngHandlerAdapter.handleInternal (RequestMappingHandlerAdapter.java:738) ~ [spring-webmvc-4.3.12.RELEASE.jar: 4.3.12.RELEASE] bei org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle (AbstractHandlerMethodAdapter.java:85) ~ [spring-webmvc-4.3.12.RELEASE.jar: 4.3. 12.RELEASE] unter org.springframework.web.servlet.DispatcherServlet.doDispatch (DispatcherServlet.java:967) ~ [spring-webmvc-4.3.12.RELEASE.jar: 4.3.12.RELEASE] unter org.springframework. web.servlet.DispatcherServlet.doService (DispatcherServlet.java:901) ~ [spring-webmvc-4.3.12.RELEASE.jar: 4.3.12.RELEASE] unter org.springframework.web.servlet.FrameworkServlet.processRequest (FrameworkServlet. Java: 970) ~ [feder webmvc-4.3.12.RELEASE.jar: 4.3.12.RELEASE] bei org.springframework.web.servlet.FrameworkServlet.doGet (FrameworkServlet.java:861) ~ [feder webmvc- 4.3.12.RELEASE.jar: 4.3.12.RELEASE] bei javax.servlet.http.HttpServlet.ser Schraubstock (HttpServlet.java:635) ~ [tomcat-einzubetten-core-8.5.23.jar: 8.5.23] bei org.springframework.web.servlet.FrameworkServlet.service (FrameworkServlet.java:846) ~ [Frühlings- webmvc-4.3.12.RELEASE.jar: 4.3.12.RELEASE] bei javax.servlet.http.HttpServlet.service (HttpServlet.java:742) ~ [tomcat-embed-Core-8.5.23.jar: 8.5. 23] bei org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:231) ~ [tomcat-embed-core-8.5.23.jar: 8.5.23] bei org.apache.catalina.core. ApplicationFilterChain.doFilter (ApplicationFilterChain.java:166) ~ [tomcat-embed-core-8.5.23.jar: 8.5.23] bei org.apache.tomcat.websocket.server.WsFilter.doFilter (WsFilter.java:52) ~ [tomcat-embed-websocket-8.5.23.jar: 8.5.23] bei org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:193) ~ [zu mcat-embed-Core-8.5.23.jar: 8.5.23] bei org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:166) ~ [tomcat-embed-Core-8.5.23.jar: 8.5.23] unter org.springframework.web.filter.RequestContextFilter.doFilterInternal (RequestContextFilter.java:99) ~ [spring-web-4.3.12.RELEASE.jar: 4.3.12.RELEASE] unter org.springframework. web.filter.OncePerRequestFilter.doFilter (OncePerRequestFilter.java:107) ~ [spring-web-4.3.12.RELEASE.jar: 4.3.12.RELEASE] bei org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain. Java: 193) ~ [tomcat-einzubetten-core-8.5.23.jar: 8.5.23] bei org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:166) ~ [tomcat-einzubetten-core- 8.5.23.jar: 8.5.23] unter org.springframework.web.filter.HttpPutFormContentFilter.doFilterInt ernal (HttpPutFormContentFilter.java:108) ~ [spring-web-4.3.12.RELEASE.jar: 4.3.12.RELEASE] unter org.springframework.web.filter.OncePerRequestFilter.doFilter (OncePerRequestFilter.java:107) ~ [ spring-web-4.3.12.RELEASE.jar: 4.3.12.RELEASE] bei org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:193) ~ [tomcat-embed-core-8.5.23. jar: 8.5.23] bei org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:166) ~ [tomcat-embed-core-8.5.23.jar: 8.5.23] bei org.springframework. web.filter.HiddenHttpMethodFilter.doFilterInternal (HiddenHttpMethodFilter.java:81) ~ [spring-web-4.3.12.RELEASE.jar: 4.3.12.RELEASE] unter org.springframework.web.filter.OncePerRequestFilter.doFilter (OncePerRequestFilter. java: 107) ~ [spring-web-4.3.12.RELEASE.jar: 4.3.12.RELEASE] a t org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:193) ~ [tomcat-embed-core-8.5.23.jar: 8.5.23] bei org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:166) ~ [tomcat-embed-core-8.5.23.jar: 8.5.23] bei org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal (CharacterEncodingFilter.java:197) ~ [spring-web -4.3.12.RELEASE.jar: 4.3.12.RELEASE] unter org.springframework.web.filter.OncePerRequestFilter.doFilter (OncePerRequestFilter.java:107) ~ [spring-web-4.3.12.RELEASE.jar: 4.3 .12.RELEASE] bei org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:193) ~ [tomcat-embed-core-8.5.23.jar: 8.5.23] bei org.apache.catalina .core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:166) ~ [tomcat-embed-core-8.5.23.jar: 8.5.23] bei org.apache.catalina.core.StandardWrapperValve.invoke (StandardWrapperValve.java:199) ~ [tomcat-embed-core-8.5.23.jar: 8.5.23] bei org.apache. catalina.core.StandardContextValve.invoke (StandardContextValve.java:96) [tomcat-embed-core-8.5.23.jar: 8.5.23] bei org.apache.catalina.authenticator.AuthenticatorBase.invoke (AuthenticatorBase.java:478) [tomcat-embed-core-8.5.23.jar: 8.5.23] bei org.apache.catalina.core.StandardHostValve.invoke (StandardHostValve.java:140) [tomcat-embed-core-8.5.23.jar : 8.5.23] bei org.apache.catalina.valves.ErrorReportValve.invoke (ErrorReportValve.java:81) [tomcat-embed-core-8.5.23.jar: 8.5.23] bei org.apache.catalina. core.StandardEngineValve.invoke (StandardEngineValve.java:87) [tomcat-embed-core-8.5.23.jar: 8.5.23] bei org.apache.catali na.connector.CoyoteAdapter.service (CoyoteAdapter.java:342) [tomcat-embed-core-8.5.23.jar: 8.5.23] bei org.apache.coyote.http11.Http11Processor.service (Http11Processor.java:803) [tomcat-embed-core-8.5.23.jar: 8.5.23] bei org.apache.coyote.AbstractProcessorLight.process (AbstractProcessorLight.java:66) [tomcat-embed-core-8.5.23.jar: 8.5 .23] bei org.apache.coyote.AbstractProtocol $ ConnectionHandler.process (AbstractProtocol.java:868) [tomcat-embed-core-8.5.23.jar: 8.5.23] bei org.apache.tomcat.util. net.NioEndpoint $ SocketProcessor.doRun (NioEndpoint.java:1459) [tomcat-embed-core-8.5.23.jar: 8.5.23] bei org.apache.tomcat.util.net.SocketProcessorBase.run (SocketProcessorBase.java : 49) [tomcat-embed-core-8.5.23.jar: 8.5.23] bei java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1142) [na: 1.8.0 _131] bei java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:617) [na: 1.8.0_131] bei org.apache.tomcat.util.threads.TaskThread $ WrappingRunnable.run (TaskThread.java : 61) [tomcat-embed-Core-8.5.23.jar: 8.5.23] bei java.lang.Thread.run (Thread.java:748) [na: 1.8.0_131]

+0

Versuchen Sie setMaximumPoolSize (100); – user7294900

+0

hi @ user7294900, Die Poolgröße kann aus anderen Gründen nicht geändert werden. Ich schätze es sehr, wenn Sie mir dafür eine Erklärung geben können? –

Antwort

0

Sie Legen Sie die maximale Poolgröße auf 45 fest, dh, wenn 45 Verbindungen hergestellt wurden, wartet die nächste Anfrage, bis eine freigegeben wird. In Ihrem Fall wurde bis zur Zeitüberschreitung nach 30 Sekunden gewartet.

Wenn Sie 15-20 Anfragen haben, nimmt wahrscheinlich jede Anfrage mindestens 3 Verbindungen an und gibt sie nicht in 30 Sekunden frei.

Es könnte ein Verbindungsleck vorliegen, was bedeutet, dass Sie eine Verbindung öffnen und nicht schließen, was dazu führt, dass die Verbindung im Pool offen bleibt.

Wenn es kein Leck gibt, benötigt Ihr SQL viel Zeit und muss seine Leistung verbessern.

Sie sollten Ihre Umgebung überwachen und den Engpass/Leck finden.