This connection has been closed,应用连接数据库后1-3小时,即自动断开连接
Posted 瀚高PG实验室
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了This connection has been closed,应用连接数据库后1-3小时,即自动断开连接相关的知识,希望对你有一定的参考价值。
目录
环境
症状
问题原因
解决方案
环境
系统平台:中标麒麟(CPU海光)7
版本:4.3.4.7
症状
ISV部署的环境(多应用+java+MyBatis+DBCP连接池+hgdbV4347)下,发现应用在1-3小时运行后会断开连接,需要重启数据库或者应用才能连接,但是数据库管理工具不会断开。
具体报错信息如下:
问题原因
分析可能的原因包括:
1.网络原因导致。
2.应用使用的连接池为DBCP,本身包含许多配置参数,参数配置异常导致取到了已断开的连接。
解决方案
1.监控网络状况
在应用端(选择容易出现此问题的应用端)部署到数据库服务器端的网络监控,方法:
创建文件autoTelent.sh
touch autoTelnet.sh
文件内容如下:
#!/usr/bin/env bash
while true
do
date
echo "" | telnet 服务器IP 5866
echo ""
sleep 1
done
赋运行权限
chmod +x autoTelnet.sh
运行
nohup ./autoTelnet.sh &
启动测试,当再次出现无法连接时,检查监控日志./nohup.out,是否正常。如果未出现异常可排除网络原因,进行下一步修改连接池参数。
2.配置连接池参数
### highgoDB config ###
spring.datasource.hg.url=
spring.datasource.hg.username=
spring.datasource.hg.password=
spring.datasource.hg.driver-class-name=com.highgo.jdbc.Driver
spring.datasource.hg.maxActive=50
# maxActive 池中工作连接的最大个数,如果小于等于0则表示步限制。
spring.datasource.hg.initialSize=10
# initialSize 连接器启动时创建的初始连接数。默认为 10。
spring.datasource.hg.maxWait=60000
# maxWait 以毫秒表示的当连接池中没有可用连接时等待可用连接返回的时间,超时则抛出异常,值为-1时无限期等待。
spring.datasource.hg.minIdle=6
# minIdle 池始终都应保留的连接的最小数目。
spring.datasource.hg.timeBetweenEvictionRunsMillis=60000
# timeBetweenEvictionRunsMillis 空闲连接验证/清除线程运行之间的休眠时间(以毫秒计)。不能低于 1 秒。该值决定了我们检查空闲连接、废弃连接的频率,以及验证空闲连接的频率。默认为 5000(5 秒)
spring.datasource.hg.minEvictalbeIdleTimeMillis=300000
# minEvictalbeIdleTimeMillis 以毫秒表示的连接被空闲对象驱逐进程驱逐前在池中保持空闲状态的最小时间(如果存在空闲对象驱逐进程)。
spring.datasource.hg.validationQuery=select 1
# validationQuery 在将池中连接返回给调用者之前,用于验证这些连接的 SQL 查询。如果指定该值,则该查询不必返回任何数据,只是不抛出SQLException 异常即可。默认为 null。实例值为:SELECT 1。
spring.datasource.hg.testWhileIdle=true
# testWhileIdle 会使用测试线程,测试池中连接是否能够正常使用。
spring.datasource.hg.testOnBorrow=false
# testOnBorrow 指定连接被调用时是否经过校验。如果校验未通过,则该连接被连接池断掉,并由连接池尝试调用另一个连接。
spring.datasource.hg.testOnReturn=false
# testOnReturn 指定连接返回到池中时是否经过校验。
以上是关于This connection has been closed,应用连接数据库后1-3小时,即自动断开连接的主要内容,如果未能解决你的问题,请参考以下文章
VMware Workstation 打开虚拟机提示:传输(VMDB)错误-14: Pipe connection has been broken 无法待机/Transport (VMDB) erro
this license has been cancelled
getOutputStream() has already been called for this response
This package has been marked as private