Проблема пула соединений Tomcat ThrowableCallStack - PullRequest
0 голосов
/ 16 ноября 2018

Находят следующие журналы иногда в Tomcat8.5. Когда мы наблюдаем ошибку stacktrace мы не нашли никакой утечки соединения в коде, кроме журнала иногда захватывается Я не могу понять, является ли это указание на утечку соединения или любую другую проблему.

Pooled object created 2018-11-13 11:00:01 -0800 by the following code
has not been returned to the pool:
org.apache.tomcat.dbcp.pool2.impl.ThrowableCallStack$Snapshot   at
org.apache.tomcat.dbcp.pool2.impl.ThrowableCallStack.fillInStackTrace(ThrowableCallStack.java:71)
        at org.apache.tomcat.dbcp.pool2.impl.DefaultPooledObject.allocate(DefaultPooledObject.java:192)
        at org.apache.tomcat.dbcp.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:455)
        at org.apache.tomcat.dbcp.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:361)
        at org.apache.tomcat.dbcp.dbcp2.PoolingDataSource.getConnection(PoolingDataSource.java:134)
        at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.getConnection(BasicDataSource.java:1543)
        at com.sample.test.db.SlaveDBConnection.initiateConnection(SlaveDBConnection.java:40)
        at com.sample.test.db.SlaveDBConnection.<init>(SlaveDBConnection.java:25)
        at com.sample.test.db.DBFactory.getDBObject(DBFactory.java:80)
        at com.sample.test.app.model.dao.UserDAOImpl.getUserData(UserDAOImpl.java:1795)
        at org.apache.jsp.getData_jsp._jspService(getData_jsp.java:298)
        at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
        at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:443)
        at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:386)
        at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:330)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
        at org.apache.tomcat.websocket.server.MFilter.doFilter(MFilter.java:52)

Вот что значит org.apache.tomcat.dbcp.pool2.impl.ThrowableCallStack$Snapshot и когда мы получим эту проблему. И как мы можем воспроизвести эту проблему?

1 Ответ

0 голосов
/ 16 ноября 2018

Веб-приложение, которое вы запускаете, имеет активированный флаг logAbandoned для пула ресурсов.Всякий раз, когда приложение получает новое соединение JDBC, пул берет (служебные) время и записывает трассировку стека вызовов в память.Всякий раз, когда он позже распознает, что соединение JDBC не было закрыто должным образом, он возьмет этот снимок трассировки стека и выгрузит его в журнал, указывая точное местоположение (исходный файл Java и строка, если она скомпилирована для отладки), где было получено соединениекоторый не был надежно закрыт, рискуя утечкой соединения.

Воспроизводимость сильно зависит от того, что и когда приложение фактически делает.Это может быть трудно воспроизвести, если для этого есть несколько побочных условий, но вы можете прочитать фактическое место, откуда это происходит в трассировке стека, и, возможно, проанализировать исходный код, найти виновные строки кода и, возможно, даже обвинитьразработчик; -)

См. документацию Tomcat для дальнейшего чтения здесь .

...