2017-12-19 14 views
0

私たちは、位置情報サービスアプリケーションを提供しています。これは、MySQLデータベースから他のアプリケーションに位置情報を提供します。何らかの理由で、ロケーションサービスが複数のリクエストを受け取ったときにMySQLデータベースに接続できません。継続的な15-20リクエストを同時に取得すると失敗します。次のスニペットは、MySQL設定コードとエラースタックです。ひかりCP接続エラー

[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 - 接続が利用できない、要求が30000ms後にタイムアウトになりました。 at com.zaxxer.hikari.pool.HikariPool.createTimeoutException(HikariPool.java:666)〜[HikariCP-2.7.4.jar:na] at com.zaxxer.hikari.pool.HikariPool.getConnection(HikariPool.java: 182)〜[HikariCP-2.7.4.jar:na] com.zaxxer.hikari.pool.HikariPool.getConnection(HikariPool.java:147)〜[HikariCP-2.7.4.jar:na] at com。 jaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:85)〜[HikariCP-2.7.4.jar:na] at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) 〜[hibernate-core-5.0.12.Final.jar:5.0.12.Final] at org.hibernate.internal.AbstractSessionImpl $ NonContextualJdbcConnectionAccess.obtainConnection(AbstractSessionImpl.java:386)〜[hibernate-core-5.0.12。 Final.jar:5.0.12.Final] at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.acquireConnectionIfNeeded(LogicalConnectionManagedImpl.java:87)〜[hibernate-core-5.0.12.Final.jar:5.0.12.Final] at org.hibernate.resource.jdbc。内部のLogicalConnectionManagedImpl.getPhysicalConnection(LogicalConnectionManagedImpl.java:112)〜[hibernate-core-5.0.12.Final.jar:5.0.12.Final] at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.getConnectionForTransactionManagement(LogicalConnectionManagedImpl。 java:230)〜[hibernate-core-5.0.12.Final.jar:5.0.12.Final] at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.begin(LogicalConnectionManagedImpl.java:237)〜[hibernate- core-5.0.12.Final.jar:5.0.12.Final] at 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] at org.hibernate.engine.transaction.internal.TransactionImpl.begin(TransactionImpl.java:52)〜[ hibernate-core-5.0.12.Final.jar:5.0.12.Final] at org.hibernate.internal.SessionImpl.beginTransaction(SessionImpl.java:1512)〜[hibernate-core-5.0.12.Final.jar: 5.0.12.Final] com.projectxxx.actionImpl.LocationManagementImpl.findAddressByPostalCode(LocationManagementImpl.java:40)〜[classes /:na] at com.projectxxx.controller.LocationReadController.service3(LocationReadController.java:40)〜 [クラス/:NA] sun.reflect.GeneratedMethodAccessor51.invoke(不明なソース)で 〜[ナ:ナ] sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)で 〜[NA:1.8.0_131] at java.l (InvocableHandlerMethod.java:205)〜[spring-web-web.news]をクリックしてください。 4.3.12.RELEASE.jar:4.3.12.RELEASE] 、org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:133)〜[spring-web-4.3.12.RELEASE.jar: 4.3.12.RELEASE] at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:97)〜[spring-webmvc-4.3.12.RELEASE.jar:4.3.12。 [リリース] at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827)〜[spring-webmvc-4.3.12.RELEASE.jar:4.3.12.RELEASE] at org.springframework.web.servlet.mvc.method.annotation.RequestMappi ngHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738)〜[spring-webmvc-4.3.12。RELEASE.jar:4.3.12.RELEASE] at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)〜[spring-webmvc-4.3.12.RELEASE.jar:4.3。 12.RELEASE] at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:967)〜[spring-webmvc-4.3.12.RELEASE]: at org.springframework。 web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901)〜[spring-webmvc-4.3.12.RELEASE.jar:4.3.12.RELEASE] at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet。 java:970)〜[spring-webmvc-4.3.12.RELEASE.jar:4.3.12.RELEASE] at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)〜[spring-webmvc- 4.3.12.RELEASE.jar:4.3.12.RELEASE] at javax.servlet.http.HttpServlet.ser (org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)〜[spring-embed-core-8.5.23.jar:8.5.23] ) webmvc-4.3.12.RELEASE.jar:4.3.12.RELEASE] (javax.servlet.http.HttpServlet.java:742)〜[tomcat-embed-core-8.5.23.jar:8.5。 23] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)〜[Tomcat-embed-core-8.5.23.jar:8.5.23] at org.apache.catalina.core。 ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)〜[tomcat-embed-core-8.5.23.jar:8.5.23] at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 〜[tomcat-embed-websocket-8.5.23.jar:8.5.23] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)〜[to mcat-embed-core-8.5.23.jar:8.5.23] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)〜[Tomcat-embed-core-8.5.23.jar: 8.5.23] at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99)〜[spring-web-4.3.12.RELEASE.jar:4.3.12.RELEASE] at org.springframework。 web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)〜[spring-web-4.3.12.RELEASE.jar:4.3.12.RELEASE] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain。 java:193)〜[tomcat-embed-core-8.5.23.jar:8.5.23] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)〜[Tomcat-embed-core- 8.5.23.jar:8.5.23] at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInt (HelperPutFormContentFilter.java:108)〜[spring-web-4.3.12.RELEASE.jar:4.3.12.RELEASE] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)〜[ spring-web-4.3.12.RELEASE.jar:4.3.12.RELEASE] をorg.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)〜[Tomcat-embed-core-8.5.23。 jar:8.5.23] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)〜[Tomcat-embed-core-8.5.23.jar:8.5.23] at org.springframework。 Web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:81)〜[spring-web-4.3.12.RELEASE.jar:4.3.12.RELEASE] at 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] at org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:166)〜[tomcat-embed-core-8.5.23.jar:8.5.23] at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197)〜[spring-web -4.3.12.RELEASE.jar:4.3.12.RELEASE] 、org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)〜[spring-web-4.3.12.RELEASE.jar:4.3 .12.RELEASE] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)〜[Tomcat-embed-core-8.5.23.jar:8.5.23] at org.apache.catalina .core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)〜[tomcat-embed-core-8.5.23。jar:8.5.23] at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)〜[Tomcat-embed-core-8.5.23.jar:8.5.23] at org.apache。 catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)[Tomcat-embed-core-8.5.23.jar:8.5.23] at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:478) )[Tomcat-embed-core-8.5.23.jar:8.5.23] at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)[tomcat-embed-core-8.5.23.jar :8.5.23] at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)[tomcat-embed-core-8.5.23.jar:8.5.23] at org.apache.catalina。 core.StandardEngineValve.invoke(StandardEngineValve.java:87)[tomcat-embed-core-8.5.23.jar:8.5.23] at org.apache.catali na.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)[tomcat-embed-core-8.5.23.jar:8.5.23] at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:803) )[tomcat-embed-core-8.5.23.jar:8.5.23] at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)[tomcat-embed-core-8.5.23.jar:8.5 .23] at org.apache.coyote.AbstractProtocol $ ConnectionHandler.process(AbstractProtocol.java:868)[tomcat-embed-core-8.5.23.jar:8.5.23] at org.apache.tomcat.util。 net.NioEndpoint $ SocketProcessor.doRun(NioEndpoint.java:1459)[Tomcat-embed-core-8.5.23.jar:8.5.23] at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java :49)[tomcat-embed-core-8.5.23.jar:8.5.23] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)[なし:1.8.0] _131] at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:617)[na:1.8.0_131] at org.apache.tomcat.util.threads.TaskThread $ WrappingRunnable.run(TaskThread.java :61)[Tomcatの-埋め込みコア8.5.23.jar:8.5.23] java.lang.Thread.run(Thread.java:748)における[NA:1.8.0_131]

+0

try setMaximumPoolSize(100); – user7294900

+0

hi @ user7294900、その他の理由によりプールサイズを変更できません。あなたが私にそれを説明することができたら本当に感謝していますか? –

答えて

0

あなた最大プールサイズを45に設定すると、45回の接続が行われた場合、次のリクエストは解放されるまで待機し、30秒後にタイムアウトが発生するまで待機します。

リクエストが15-20件の場合、各リクエストには少なくとも3つの接続が必要で、30秒以内に解放される可能性があります。

接続リークが発生する可能性があります。つまり、接続を開いて閉じなかったため、接続がプール内で開かれたままになる可能性があります。

もし漏れがなければ、あなたのSQLは長い時間がかかり、パフォーマンスを改善する必要があるかもしれません。

環境を監視し、ボトルネック/リークを見つけてください。