使用连接池druid报错The last packet successfully received from the server was XXX milliseconds ago.(实测解决)

出现场景

跑定时任务执行sql脚本的时候,sql的复杂度特别大,又不想优化,客户端跑需要10几秒,在druid连接池中跑任务就报上面的错误了。完整错误如下:

The last packet successfully received from the server was 10,009 milliseconds ago. The last packet sent successfully to the server was 10,009 milliseconds ago.

分析

引入chatgpt对此错误的分析如下:

  • 提问:使用druid查询mysql报错The last packet successfully received from the server was 10,011 milliseconds ago. The last packet sent successfully to the server was 10,011 milliseconds ago.
  • ChatGPT回答:
    这个错误信息通常表示MySQL连接已经超时了,即长时间没有收到新的查询请求。这可能是因为数据库连接处于空闲状态而被MySQL服务器关闭。你可以尝试使用以下方法来解决这个问题:
    
    检查数据库服务器和应用服务器之间的网络连接是否正常,特别是在高延迟或不稳定的网络环境下。
    
    增加数据库连接的超时时间,这可以通过在JDBC URL中添加"autoReconnect=true&autoReconnectForPools=true&connectTimeout=30000&socketTimeout=60000"参数实现(具体数值可以根据实际情况调整)。
    
    使用数据库连接池来管理连接,可以更好地控制连接的超时时间和重连逻辑。
    
    检查数据库是否已满,如果数据库已经使用了大量的系统资源,那么此时数据库的性能可能很低,以至于无法响应新的查询请求。
    
    总之,当出现该错误时,除了以上几个方面的问题需要你尝试解决,还可能会涉及到MySQL服务器本身的设置,例如超时时间、缓存设置等,你可以根据实际情况调整这些设置来解决该问题。
    

引用chatgpt的解决方法,确实可以解决,方案如下:

jdbc连接串:
jdbc:mysql://192.168.10.12:3306/est_deploy?keepAlive=true&autoReconnect=true&autoReconnectForPools=true&connectTimeout=30000&socketTimeout=60000
druid的配置(询问gpt给出的合理配置范围如下,查看了下确实挺合理的):

{
	"initial-size": 10,
	"min-idle": 5,
	"maxActive": 30,
	"timeBetweenEvictionRunsMillis": 50000,
	"validationQuery": "SELECT 1",
	"testWhileIdle": true,
	"test-on-borrow": false,
	"test-while-idle": false,
	"min-evictable-idle-time-millis": 300000,
	"max-evictable-idle-time-millis": 600000
}
根据错误信息,这是一个与MySQL服务器的通信故障。最后一次成功接收到来自服务器的数据包是4,836毫秒前,最后一次成功发送到服务器的数据包是4,839毫秒前。 在排查这个问题之前,你可以检查以下几个参数: 1. 检查网络连接:确保你的应用程序和MySQL服务器之间的网络连接是正常的,没有任何阻塞或断开的情况发生。 2. 检查MySQL服务器状态:确保MySQL服务器正在正常运行,并且没有出现任何异常或错误。你可以查看MySQL服务器的日志文件以获取更多的信息。 3. 检查连接池配置:根据你提供的信息,连接池的配置中有一些参数,例如testWhileIdle、idle millis、minIdle、poolingCount、timeBetweenEvictionRunsMillis等。你可以检查这些参数的设置是否合理,并根据实际情况进行调整。 建议: 1. 检查网络连接是否正常,包括应用程序与MySQL服务器之间的网络连接以及服务器本身的网络连接。 2. 检查MySQL服务器的状态,确保它正在正常运行。 3. 检查连接池配置参数,确保它们被正确设置并适应你的应用程序需求。你可以尝试增加连接池的最小空闲连接数(minIdle)或减少空闲时间(idle millis)来避免连接超时的情况发生。 4. 如果问题仍然存在,可以尝试升级MySQL驱动程序,或者尝试使用其他的连接池实现。 请注意,这只是一些可能的排查步骤和建议,具体的解决方法可能需要根据你的应用程序和环境来确定。建议在排查问题之前备份你的数据,并在进行任何更改之前仔细评估潜在的风险。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值