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

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中断,一定要考虑清楚再配上。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Tongweb官方文档是一份详细的指南,旨在帮助用户了解和使用Tongweb平台的各种功能和特性。该文档包含了各种主题,如入门指南、安装和配置、API文档、常见问题解答以及最佳实践等。 首先,在入门指南中,文档提供了对Tongweb平台的介绍,包括它的用途、特点和优势。这部分还提供了设置和安装Tongweb所需的系统要求和步骤,以及进一步探索平台各个方面的链接。 然后,在安装和配置部分,文档详细介绍了Tongweb的安装过程,包括下载、解压缩、配置和启动应用程序的步骤。此外,还提供了详细的配置指南,让用户可以根据自己的需求对平台进行定制化配置。 接下来,文档提供了对Tongweb的API文档,详细介绍了各种API的用法、参数和返回值。这些API包括用户管理、权限控制、数据分析、日志记录等功能,可以帮助用户更好地利用Tongweb平台进行数据管理和分析。 此外,文档还回答了一些常见问题,以帮助用户解决在使用Tongweb过程中可能遇到的问题。这些问题可能涉及到配置、性能优化、常见错误等方面,文档提供了解答和解决方案,以帮助用户更好地使用Tongweb。 最后,在最佳实践部分,文档提供了一些使用Tongweb平台的最佳实践建议,包括如何优化性能、提高安全性和可靠性。这些建议可以帮助用户更好地利用Tongweb平台,并避免一些常见的错误和问题。 总之,Tongweb官方文档是一份全面而详细的指南,为用户提供了使用和了解Tongweb平台各个方面的重要信息。它可以帮助用户快速上手,并更好地应用Tongweb进行数据管理和分析。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值