forum.bitel.ru http://forum.bitel.ru/ |
|
script:execute не закрываются соединения к бд http://forum.bitel.ru/viewtopic.php?f=19&t=12759 |
Страница 1 из 1 |
Автор: | fmaks [ 25 дек 2017, 22:41 ] |
Заголовок сообщения: | script:execute не закрываются соединения к бд |
Здравствуйте. Подскажите, пожалуйста, что делать со следующей проблемой - "Connections pool to Master status Idle: 13; Active: 19; maxActive: 400; maxIdle: 30", т.е. постепенно копятся незакрытые соединения. Судя по логу после ./server.sh conpool это результат выполнения дин. кода из xslt. Код: MySQL Connector Java at ru.bitel.bgbilling.server.util.DefaultServerSetup$1.borrowObject(DefaultServerSetup.java:337) at ru.bitel.bgbilling.server.util.DatabaseConnectionPool$1.getConnection(DatabaseConnectionPool.java:30) at ru.bitel.bgbilling.server.util.DefaultServerSetup.getDBConnectionFromPool(DefaultServerSetup.java:588) at bitel.billing.server.util.exslt.DynCodeExecuter.execute(DynCodeExecuter.java:38) at bitel.billing.server.util.exslt.DynCodeExecuter.execute(DynCodeExecuter.java:91) at sun.reflect.GeneratedMethodAccessor385.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.xalan.extensions.ExtensionHandlerJavaClass.callFunction(ExtensionHandlerJavaClass.java:401) at org.apache.xalan.extensions.ExtensionHandlerJavaClass.callFunction(ExtensionHandlerJavaClass.java:440) at org.apache.xalan.extensions.ExtensionsTable.extFunction(ExtensionsTable.java:222) at org.apache.xalan.transformer.TransformerImpl.extFunction(TransformerImpl.java:473) at org.apache.xpath.functions.FuncExtFunction.execute(FuncExtFunction.java:208) at org.apache.xpath.XPath.execute(XPath.java:337) at org.apache.xalan.templates.ElemVariable.getValue(ElemVariable.java:280) at org.apache.xalan.templates.ElemVariable.execute(ElemVariable.java:248) at org.apache.xalan.templates.ElemApplyTemplates.transformSelectedNodes(ElemApplyTemplates.java:395) at org.apache.xalan.templates.ElemApplyTemplates.execute(ElemApplyTemplates.java:178) at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400) at org.apache.xalan.transformer.TransformerImpl.applyTemplateToNode(TransformerImpl.java:2270) at org.apache.xalan.transformer.TransformerImpl.transformNode(TransformerImpl.java:1356) at org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:709) at org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:1273) at org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:1251) at ru.bitel.bgbilling.kernel.container.web.action.XSLManager.transform(XSLManager.java:226) at bitel.billing.server.contract.action.ActionContractCard2.doAction(ActionContractCard2.java:126) at bitel.billing.server.Executer.doModule(SourceFile:602) at bitel.billing.server.Executer$1.run(SourceFile:199) at java.security.AccessController.doPrivileged(Native Method) at javax.security.auth.Subject.doAs(Subject.java:422) at bitel.billing.server.Executer.doPost(SourceFile:193) at javax.servlet.http.HttpServlet.service(HttpServlet.java:646) at javax.servlet.http.HttpServlet.service(HttpServlet.java:727) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) at ru.bitel.common.server.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:54) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:504) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1074) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:748) ru.bitel.bgbilling.server.util.DefaultServerSetup$2$1@340686fc at ru.bitel.bgbilling.server.util.DefaultServerSetup$1.borrowObject(DefaultServerSetup.java:337) at ru.bitel.bgbilling.server.util.DatabaseConnectionPool$1.getConnection(DatabaseConnectionPool.java:30) at ru.bitel.bgbilling.server.util.DefaultServerSetup.getDBConnectionFromPool(DefaultServerSetup.java:588) at bitel.billing.server.util.exslt.DynCodeExecuter.execute(DynCodeExecuter.java:38) at bitel.billing.server.util.exslt.DynCodeExecuter.execute(DynCodeExecuter.java:91) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.xalan.extensions.ExtensionHandlerJavaClass.callFunction(ExtensionHandlerJavaClass.java:401) at org.apache.xalan.extensions.ExtensionHandlerJavaClass.callFunction(ExtensionHandlerJavaClass.java:440) at org.apache.xalan.extensions.ExtensionsTable.extFunction(ExtensionsTable.java:222) at org.apache.xalan.transformer.TransformerImpl.extFunction(TransformerImpl.java:473) at org.apache.xpath.functions.FuncExtFunction.execute(FuncExtFunction.java:208) at org.apache.xpath.Expression.executeCharsToContentHandler(Expression.java:313) at org.apache.xalan.templates.ElemValueOf.execute(ElemValueOf.java:274) at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400) at org.apache.xalan.templates.ElemLiteralResult.execute(ElemLiteralResult.java:1376) at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400) at org.apache.xalan.templates.ElemLiteralResult.execute(ElemLiteralResult.java:1376) at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400) at org.apache.xalan.templates.ElemLiteralResult.execute(ElemLiteralResult.java:1376) at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400) at org.apache.xalan.templates.ElemIf.execute(ElemIf.java:162) at org.apache.xalan.templates.ElemForEach.transformSelectedNodes(ElemForEach.java:425) at org.apache.xalan.templates.ElemForEach.execute(ElemForEach.java:265) at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400) at org.apache.xalan.templates.ElemChoose.execute(ElemChoose.java:128) at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400) at org.apache.xalan.templates.ElemLiteralResult.execute(ElemLiteralResult.java:1376) at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400) at org.apache.xalan.templates.ElemLiteralResult.execute(ElemLiteralResult.java:1376) at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400) at org.apache.xalan.templates.ElemLiteralResult.execute(ElemLiteralResult.java:1376) at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400) at org.apache.xalan.templates.ElemLiteralResult.execute(ElemLiteralResult.java:1376) at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400) at org.apache.xalan.templates.ElemLiteralResult.execute(ElemLiteralResult.java:1376) at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400) at org.apache.xalan.templates.ElemLiteralResult.execute(ElemLiteralResult.java:1376) at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400) at org.apache.xalan.templates.ElemLiteralResult.execute(ElemLiteralResult.java:1376) at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400) at org.apache.xalan.templates.ElemLiteralResult.execute(ElemLiteralResult.java:1376) at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400) at org.apache.xalan.templates.ElemLiteralResult.execute(ElemLiteralResult.java:1376) at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400) at org.apache.xalan.templates.ElemLiteralResult.execute(ElemLiteralResult.java:1376) at org.apache.xalan.templates.ElemApplyTemplates.transformSelectedNodes(ElemApplyTemplates.java:395) at org.apache.xalan.templates.ElemApplyTemplates.execute(ElemApplyTemplates.java:178) at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400) at org.apache.xalan.transformer.TransformerImpl.applyTemplateToNode(TransformerImpl.java:2270) at org.apache.xalan.transformer.TransformerImpl.transformNode(TransformerImpl.java:1356) at org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:709) at org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:1273) at org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:1251) at ru.bitel.bgbilling.kernel.container.web.action.XSLManager.transform(XSLManager.java:226) at bitel.billing.server.contract.action.ActionContractCard2.doAction(ActionContractCard2.java:126) at bitel.billing.server.Executer.doModule(SourceFile:602) at bitel.billing.server.Executer$1.run(SourceFile:199) at java.security.AccessController.doPrivileged(Native Method) at javax.security.auth.Subject.doAs(Subject.java:422) at bitel.billing.server.Executer.doPost(SourceFile:193) at javax.servlet.http.HttpServlet.service(HttpServlet.java:646) at javax.servlet.http.HttpServlet.service(HttpServlet.java:727) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) at ru.bitel.common.server.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:54) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:504) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1074) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:748) Смущает только количество незакрытых соединений, т.к. дин. код выполняется при печати каждой квитанции, а там их не одна тысяча (19 в примере, это не показатель, но количество оставшихся открытыми явно не пропорционально количеству вызовов). Была на форуме тема, похожая тема про script:invoke но не уверен что это аналогично. Собственно у меня вопрос - требуется ли самому делать в коде con.close(), в wiki это ни как не указано или копать в другом направлении? |
Автор: | Phricker [ 25 дек 2017, 23:40 ] |
Заголовок сообщения: | Re: script:execute не закрываются соединения к бд |
Скрипт то покажите |
Автор: | Artur [ 26 дек 2017, 13:22 ] |
Заголовок сообщения: | Re: script:execute не закрываются соединения к бд |
Здравствуйте. Соединения в скриптах, которые приходят в метод execute закрывать самостоятельно не нужно. Нужно закрывать создаваемые в скриптах Statement/PreparedStatement/ResultSet. Особенно, если они участвуют в циклах. Строго говоря, ResultSet закрывать не обязательно, т.к. он закроется автоматически при закрытии породившего его объекта, но явное закрытие никому никогда не вредило, тем более try-with-resources есть, начиная с jdk7. Также нужно закрывать те соединения, которые вы создаете самостоятельно, либо получаете с помощью метода Setup.getSetup().getDBConnectionFromPool(). |
Автор: | fmaks [ 26 дек 2017, 13:38 ] |
Заголовок сообщения: | Re: script:execute не закрываются соединения к бд |
Phricker писал(а): Скрипт то покажите Код: ... @Override public Object execute(Setup setup, Connection con, Object[] args) throws BGException { String result = null; if( args != null && args.length > 1 ) { String method = (String) args[0]; if( method != null && !method.isEmpty() ) { if( method.trim().equalsIgnoreCase( "getDepartmentByGr" ) ) { result = "" + getDepartment( (String) args[1] ); } // total npays precalc if( method.trim().equalsIgnoreCase( "getTotalNextNPays" ) ) { result = this.getTotalNextNPays(con, (String) args[1]).toPlainString(); } // total npays precalc from cache if( method.trim().equalsIgnoreCase( "getTotalNextNPaysCache" ) ) { result = this.getTotalNextNPaysCache(con, (String) args[1]).toPlainString(); } } } return result; } private BigDecimal getTotalNextNPays(Connection con, String superIdStr) { BigDecimal result = BigDecimal.ZERO; int superId = -1; try { if( superIdStr != null && !superIdStr.isEmpty() ) { superId = Integer.parseInt( superIdStr ); } if( superId > 0 ) { result = NPayPreCalculator.getTotalNextNPayPrecalc( con, superId ); } } catch(SQLException e) { System.out.println( "Error getting total npays precalc for superId: " + superId ); } finally { return result; } } ... и плюс ещё километр, который тянется из других классов. Тут боюсь ни кто не оценит эти платяницы. Где connection не закрывается мне придётся самому искать, вопрос именно в необходимости его принудительного закрытия. |
Автор: | fmaks [ 26 дек 2017, 13:45 ] |
Заголовок сообщения: | Re: script:execute не закрываются соединения к бд |
Artur писал(а): Также нужно закрывать те соединения, которые вы создаете самостоятельно, либо получаете с помощью метода Setup.getSetup().getDBConnectionFromPool(). Вот именно в этом месте и вопрос, там же внутри вот это Код: ... public Object execute(String className, String methodName, Object[] args) throws BGException if (methodName.equals("execute")) { return script.execute(Setup.getSetup(), Setup.getSetup().getDBConnectionFromPool(), args); } ... т.е. в данном случае, всё таки закрыть мне его надо чтобы соединение в пул вернулось? |
Автор: | Artur [ 26 дек 2017, 16:10 ] |
Заголовок сообщения: | Re: script:execute не закрываются соединения к бд |
"Это залет, солдат!" (с) Мы сами закроем в своем коде. А вы в своем не забывайте закрывать порождаемые Statement/PreparedStatement/ResultSet. |
Автор: | fmaks [ 26 дек 2017, 17:21 ] |
Заголовок сообщения: | Re: script:execute не закрываются соединения к бд |
Хорошо. Спасибо. Я так понимаю это прилетит уже в следующем обновлении? Стараюсь закрывать. По крайней мере конкретно в этом случае проверил, стреляет даже с таким кодом без любых PreparedStatement, инкрементится количество Active connections. Ну, да теперь понятно. |
Страница 1 из 1 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |