[alibaba/druid]求助大佬: CommunicationsException: Communications link failure :The last packet successfully received from the server was 932,134 milliseconds ago. The last packet sent successfully to the server was 931,363 milliseconds ago.

2025-11-11 434 views
9

数据库没有做读写分离 druid版本:1.0.28 mysql-connector版本 5.1.38

配置: filters:stat maxActive:20 initialSize:1 maxWait:6000 minIdle:1 timeBetweenEvictionRunsMillis:60000 minEvictableIdleTimeMillis:300000 validationQuery:select 'x' testWhileIdle:true testOnBorrow:false testOnReturn:false poolPreparedStatements:true maxOpenPreparedStatements:20

回答

1

此问题目前偶尔出现,但一出现,会一直报此错误。线上环境maxActive会配置的稍微大一点

7

看下数据库配置的连接超时时间

5

看下数据库配置的连接超时时间

都是默认配置 connect_timeout 10 interactive_timeout 28800 net_read_timeout 30 net_write_timeout 60 wait_timeout 28800

2

在数据库 url 后面配置一个 socketTimeout 参数,比如 jdbc:mysql://xxxxx:3306/dbname?socketTimeout=5000。注意这个参数会影响慢查,如果慢查时间超过3秒,也会被中断。另外我看你上面还有一个连接超时的异常,connectTimeout 参数也配置一下,先配置成 3000 试试。 这两个配置只能降低问题持续时间,并不能解决问题。最好抓包分析一下应用于 MySQL 服务器的交互过程。

1

在数据库 url 后面配置一个 socketTimeout 参数,比如 jdbc:mysql://xxxxx:3306/dbname?socketTimeout=5000。注意这个参数会影响慢查,如果慢查时间超过3秒,也会被中断。另外我看你上面还有一个连接超时的异常,connectTimeout 参数也配置一下,先配置成 3000 试试。 这两个配置只能降低问题持续时间,并不能解决问题。最好抓包分析一下应用于 MySQL 服务器的交互过程。

有多个慢查超过3s,数据量的问题,这两个参数目前都没有设置。因为这个错误是偶尔出现,但是一出现服务就会不停的报这个错误

6

有多个慢查超过3s,数据量的问题,这两个参数目前都没有设置。因为这个错误是偶尔出现,但是一出现服务就会不停的报这个错误

我们出现过类似问题,MySQL 数据库故障,不响应应用请求,导致线程被长时间卡住。通过设置 socketTimeout,可以保证连接不会卡住很长时间,超过设置值就会超时返回。

3

有多个慢查超过3s,数据量的问题,这两个参数目前都没有设置。因为这个错误是偶尔出现,但是一出现服务就会不停的报这个错误

我们出现过类似问题,MySQL 数据库故障,不响应应用请求,导致线程被长时间卡住。通过设置 socketTimeout,可以保证连接不会卡住很长时间,超过设置值就会超时返回。

谢谢, 我这边先试试,看看这种情况还会出现么

3

有多个慢查超过3s,数据量的问题,这两个参数目前都没有设置。因为这个错误是偶尔出现,但是一出现服务就会不停的报这个错误

我们出现过类似问题,MySQL 数据库故障,不响应应用请求,导致线程被长时间卡住。通过设置 socketTimeout,可以保证连接不会卡住很长时间,超过设置值就会超时返回。

谢谢, 我这边先试试,看看这种情况还会出现么

大佬能帮忙看看这个问题么 #4387,最近遇到的一个问题,非常感谢

7

有个参数phyTimeoutMillis,可以设置物理链接存在的最大时长,我也是所有办法都试了,没解决,看源码发现了这个参数。好像有用

1

有个参数phyTimeoutMillis,可以设置物理链接存在的最大时长,我也是所有办法都试了,没解决,看源码发现了这个参数。好像有用

谢谢,我试试,最近加了socketTimeout 和connectTimeout,目前还没出现那个报错,出现了就有的弄了

1

有个参数phyTimeoutMillis,可以设置物理链接存在的最大时长,我也是所有办法都试了,没解决,看源码发现了这个参数。好像有用

谢谢,我试试,最近加了socketTimeout 和connectTimeout,目前还没出现那个报错,出现了就有的弄了

我们都设置的也会出问题,phyTimeoutMillis我刚看了源码,也有问题,设置了可能也不生效。我dump出来内存发现确实存在超过数据库wait_timeout的链接,按道理设置了testOnBorrow应该没问题,结果没生效。

1

使用

有个参数phyTimeoutMillis,可以设置物理链接存在的最大时长,我也是所有办法都试了,没解决,看源码发现了这个参数。好像有用

谢谢,我试试,最近加了socketTimeout 和connectTimeout,目前还没出现那个报错,出现了就有的弄了

我们都设置的也会出问题,phyTimeoutMillis我刚看了源码,也有问题,设置了可能也不生效。我dump出来内存发现确实存在超过数据库wait_timeout的链接,按道理设置了testOnBorrow应该没问题,结果没生效。

使用keepalive配合minidle试试呢,keepalive是保活的,保证连接到数据库最少有minidle个连接,并且连接超过min-evictable-idle-time-millis会自动请求数据库保证该连接有效

1

版本太低了,升级到最新版本应该就好了。