BiTel

Форум BiTel
bgbilling.ru     docs.bitel.ru     wiki.bitel.ru     dbinfo.bitel.ru     bgcrm.ru     billing.bitel.ru     bitel.ru    
Текущее время: 19 мар 2024, 16:09

Часовой пояс: UTC + 5 часов [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
СообщениеДобавлено: 25 дек 2017, 22:41 
Не в сети

Зарегистрирован: 20 окт 2016, 00:34
Сообщения: 82
Карма: 0
Здравствуйте.
Подскажите, пожалуйста, что делать со следующей проблемой - "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 это ни как не указано или копать в другом направлении?

_________________
Клиент: вер. 7.1.206 / 15.08.2019 22:37:24
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_181
Сервер: вер. 7.1.1144 / 15.08.2019 22:39:22
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_181


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 25 дек 2017, 23:40 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 29 мар 2010, 23:11
Сообщения: 5854
Карма: 472
Скрипт то покажите

_________________
Цитаты великих людей :umnik:
Напишите в helpdesk © stark
повторяю: => хелпдеск => доработка => профит © dimOn
свершилось... © skn
Мой код изящен, лёгок, оригинален, краток. Как прохладный весенний ветерок, как звонкий ручей! © dimOn
Вежливый разработчик © Artur
Эти баги тоже исправлены, как и те, которые еще не написаны © Artur
ну т.е. существует воркэраунд, ок © dimOn


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 26 дек 2017, 13:22 
Не в сети
Аватара пользователя

Зарегистрирован: 27 янв 2010, 16:12
Сообщения: 941
Откуда: Уфа
Карма: 124
Здравствуйте.
Соединения в скриптах, которые приходят в метод execute закрывать самостоятельно не нужно. Нужно закрывать создаваемые в скриптах Statement/PreparedStatement/ResultSet. Особенно, если они участвуют в циклах. Строго говоря, ResultSet закрывать не обязательно, т.к. он закроется автоматически при закрытии породившего его объекта, но явное закрытие никому никогда не вредило, тем более try-with-resources есть, начиная с jdk7.
Также нужно закрывать те соединения, которые вы создаете самостоятельно, либо получаете с помощью метода Setup.getSetup().getDBConnectionFromPool().

_________________
С уважением, Гареев Артур. Вежливый разработчик ООО "Бител".


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 26 дек 2017, 13:38 
Не в сети

Зарегистрирован: 20 окт 2016, 00:34
Сообщения: 82
Карма: 0
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 не закрывается мне придётся самому искать, вопрос именно в необходимости его принудительного закрытия.

_________________
Клиент: вер. 7.1.206 / 15.08.2019 22:37:24
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_181
Сервер: вер. 7.1.1144 / 15.08.2019 22:39:22
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_181


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 26 дек 2017, 13:45 
Не в сети

Зарегистрирован: 20 окт 2016, 00:34
Сообщения: 82
Карма: 0
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);
    }
...


т.е. в данном случае, всё таки закрыть мне его надо чтобы соединение в пул вернулось?

_________________
Клиент: вер. 7.1.206 / 15.08.2019 22:37:24
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_181
Сервер: вер. 7.1.1144 / 15.08.2019 22:39:22
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_181


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 26 дек 2017, 16:10 
Не в сети
Аватара пользователя

Зарегистрирован: 27 янв 2010, 16:12
Сообщения: 941
Откуда: Уфа
Карма: 124
"Это залет, солдат!" (с)
Мы сами закроем в своем коде. А вы в своем не забывайте закрывать порождаемые Statement/PreparedStatement/ResultSet.

_________________
С уважением, Гареев Артур. Вежливый разработчик ООО "Бител".


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 26 дек 2017, 17:21 
Не в сети

Зарегистрирован: 20 окт 2016, 00:34
Сообщения: 82
Карма: 0
Хорошо. Спасибо. Я так понимаю это прилетит уже в следующем обновлении?
Стараюсь закрывать. По крайней мере конкретно в этом случае проверил, стреляет даже с таким кодом
без любых PreparedStatement, инкрементится количество Active connections.
Ну, да теперь понятно.

_________________
Клиент: вер. 7.1.206 / 15.08.2019 22:37:24
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_181
Сервер: вер. 7.1.1144 / 15.08.2019 22:39:22
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_181


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

Часовой пояс: UTC + 5 часов [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
POWERED_BY
Русская поддержка phpBB
[ Time : 0.052s | 35 Queries | GZIP : On ]