TongWeb的数据源连接池常见问题

编程知识 更新时间:2023-05-01 23:48:51

TongWeb的数据源连接池占满时的日志

[2019-05-13 11:15:56] [WARNING] [other] [Failed to obtain/create connection from connection pool [ test ]. Reason : The connection could not be allocated:[http-nio-8080-exec-1] Timeout: Pool empty. Unable to fetch a connection in 30 seconds, none available[size:10; busy:10; idle:0; lastwait:30000].]

红色标记内容的意思是:当前使用的数据源连接数已经等于数据源的最大连接数,不能分配更多的连接。

造成数据源问题的原因通常有如下四种:

1. 数据库JDBC驱动包与数据库版本不对应。

2. 数据源最大连接设置过小,并发访问量大的时候数据源连接数不足。或是把最大连接数设的比数据库允许的连接数还大,数据源配的最大连接数肯定得小于等于数据库允许的连接数

3. 应用存在连接泄漏的地方,打开数据库连接后没有正确的关闭,长时间运行后TongWeb的连接池被逐渐占光。

4. 应用存在SQL执行时间过长,长时间执行SQL,占用连接不释放。

TongWeb数据源泄露分析方式:

1. 最低级的错误是连接池配置过小,导致并发时连接不够用。若无论增大连接为多少,连接还不够用,就需要继续分析了。

2.在数据源配置中设置“泄漏超时”为30秒,跟踪连接池中的连接泄漏,并将获取连接的调用栈(堆栈)记录下来, 只记录不关闭连接。

当超时后,以WARNING级别将该堆栈信息输出到日志。从日志中可以分析到哪里存在未关闭的连接。日志示例如下:

[2019-05-13 11:05:55] [WARNING] [data-source] [A potential connection leak detected for connection pool test. The stack trace of the thread is provided below : java.lang.Exception

at com.tongweb.web.webutil.jdbc.pool.ConnectionPool.getThreadDump(ConnectionPool.java:1117)

at com.tongweb.web.webutil.jdbc.ThorTomEEDataSourceCreator$ThorTomEEConnectionPool.borrowConnection(ThorTomEEDataSourceCreator.java:1065)

at com.tongweb.web.webutil.jdbc.ThorTomEEDataSourceCreator$ThorTomEEConnectionPool.borrowConnection0(ThorTomEEDataSourceCreator.java:942)

at com.tongweb.web.webutil.jdbc.ThorTomEEDataSourceCreator$ThorTomEEConnectionPool.borrowConnection(ThorTomEEDataSourceCreator.java:921)

at com.tongweb.web.webutil.jdbc.pool.ConnectionPool.getConnection(ConnectionPool.java:219)

at com.tongweb.web.webutil.jdbc.ThorTomEEDataSourceCreator$ThorTomEEConnectionPool.getConnection(ThorTomEEDataSourceCreator.java:729)

at com.tongweb.web.webutil.jdbc.ThorTomEEDataSourceCreator$ThorTomEEDataSource.superGetConnection(ThorTomEEDataSourceCreator.java:241)

at com.tongweb.web.webutil.jdbc.ThorTomEEDataSourceCreator$ThorTomEEDataSource.getConnection(ThorTomEEDataSourceCreator.java:264)

at com.tongweb.tongejb.resource.jdbc.managed.local.ManagedDataSource.getConnection(ManagedDataSource.java:50)

at com.tongweb.tongejb.resource.jdbc.managed.local.ThorManagedDataSource.getConnection(ThorManagedDataSource.java:77)

at com.tongweb.web.webutil.jdbc.ThorTomEEDataSourceCreator$ThorTomEEDataSourceProxy.getConnection(ThorTomEEDataSourceCreator.java:488)

at org.apache.jsp.DBPoolTest_jsp._jspService(DBPoolTest_jsp.java:105)

at com.tongweb.web.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

at com.tongweb.web.jasper.servlet.ThorJspServletWrapper.service(ThorJspServletWrapper.java:264)

at com.tongweb.web.jasper.servlet.ThorJspServlet.serviceJspFile(ThorJspServlet.java:270)

at com.tongweb.web.jasper.servlet.ThorJspServlet.service(ThorJspServlet.java:232)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

at com.tongweb.web.thor.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)

at com.tongweb.web.thor.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)

3. 找到应用代码泄露的地方, 确认代码是否会执行connection.close()。

4. 若100%确认应用代码执行了connection.close(), 则可能是SQL的执行时间过长,长时间占用连接。这时可以打开“SQL执行时间过滤”记录下执行时间长的SQL,针对SQL进行优化。若确认某些SQL执行时间过长,且数据库无法优化,可设置"语句超时"本质为设置java.sql.Statement.setQueryTimeout(int timeout)。  但要注意某些国产数据库的JDBC驱动不支持该方法同时若应用忘记关游标statement.close()导致 maximum open cursors exceeded,可以勾上“语句跟踪”自动关闭statement。

SQL日志:  2020-11-06 13:18:26 [SQL execute 17 ms : select FILE_ID,FILE_NAME,DIS_NAME,FILE_SORT,DATA_TYPE,SERV_ID,FILE_CAT,FILE_HIST_COUNT,FILE_CHECKSUM,ORIG_FILE_ID,BELONG_DEPT,BELONG_DEPT_NAME,ITEM_CODE,FILE_PATH,FILE_SIZE,FILE_MTYPE,S_FLAG,S_CMPY,S_MTIME,FILE_MEMO,DATA_ID,WF_NI_ID,S_USER,S_UNAME,S_DEPT,S_DNAME,IESS_PROCESS_ID from SY_COMM_FILE where 1=1 and data_id = '09G2NPWVZ7TUJrJ4UKkzpr' order by FILE_SORT Thread[http-nio2-0.0.0.0-8088-exec-14]#3 Connection[2115205428]]

5. 若SQL超时不起作用,应用又不能修改代码执行connection.close()。只能用最终解决办法“泄露回收”。勾上后会在泄露超时后强制关闭连接,会导致正在执行的SQL中断,一定要考虑清楚再配上。

更多推荐

TongWeb的数据源连接池常见问题

本文发布于:2023-04-24 14:56:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/0c1e8aa093a6234a2d4617419e241d55.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:数据源   常见问题   连接池   TongWeb

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!

  • 100863文章数
  • 26067阅读数
  • 0评论数