当前位置:   article > 正文

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

the last packet successfully receive

出现场景

定时任务执行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.

  • 1
  • 2

分析

引入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服务器本身的设置,例如超时时间、缓存设置等,你可以根据实际情况调整这些设置来解决该问题。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

引用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
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/159615
推荐阅读
相关标签
  

闽ICP备14008679号