当前位置:   article > 正文

The last packet successfully received from the server was 8,098,360 milliseconds ago.

the last packet successfully receive

线上环境凌晨5分有个定时任务没执行,查看日志发现报错

The last packet successfully received from the server was 8,098,360 milliseconds ago.  The last packet sent successfully to the server was 1 milliseconds ago.

这个意思是说 从服务器成功接收的最后一个数据包是8098360(2.2小时)毫秒前。最后一个成功发送到服务器的数据包是1毫秒前。

说明这个连接已经2个小时没有从服务器上接收数据了,而mysql上定义,如果一个连接的空闲时间超过2个小时,MySQL将自动断开该连接,而连接池却认为该连接还是有效的(因为并未校验连接的有效性),当应用申请使用该连接时,就会导致上面的报错。

而这2小时是在 show variables like  'wait_timeout'; 这里设置的,修改这个就好了 。set wait_timeout' = 28800

然后jdbc的配置

jdbc.validationQuery=select 1
validationQuery是用来验证数据库连接的查询语句,这个查询语句必须是至少返回一条数据的SELECT语句。如果validationQuery为null,testOnBorrow、testOnReturn、testWhileIdle都不会其作用。
每种数据库都有各自的验证语句,下表中收集了几种常见数据库的validationQuery。
hsqldb          select 1 from INFORMATION_SCHEMA.SYSTEM_USERS
Oracle          select 1 from dual
DB2              select 1 from sysibm.sysdummy1
MySql           select 1
SqlServer     select1
postgresql   select version()
ingres           select 1
derby            values 1
H2                 select 1

jdbc.testWhileIdle=true
建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。

jdbc.testOnBorrow=true
默认true,申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。

jdbc.testOnReturn=false
归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能

jdbc.autoReconnect=true
当数据库连接异常中断时,是否自动重新连接?

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/159640
推荐阅读
相关标签
  

闽ICP备14008679号