问题
2024-06-19 15:36:00.543 [accountClusteredScheduler_Worker-6] WARN com.alibaba.druid.pool.DruidAbstractDataSource - discard long time none received connection. , jdbcUrl : jdbc:mysql://192.168.10.169:3306/zhbs_temp?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&allowMultiQueries=true&allowPublicKeyRetrieval=true, version : 1.2.8, lastPacketReceivedIdleMillis : 68637
2024-06-19 15:36:00.546 [accountClusteredScheduler_Worker-6] WARN com.alibaba.druid.pool.DruidAbstractDataSource - discard long time none received connection. , jdbcUrl : jdbc:mysql://192.168.10.169:3306/zhbs_temp?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&allowMultiQueries=true&allowPublicKeyRetrieval=true, version : 1.2.8, lastPacketReceivedIdleMillis : 109880
具体问题方案
日志条目表明Druid连接池正在丢弃数据库连接,因为这些连接在未接收任何数据包的情况下闲置了很长时间。这是连接池管理策略的一部分,旨在保持效率并防止连接变得陈旧。
以下是日志关键点的解析:
-
时间戳:两个警告都发生在2024年6月19日15:36:00,毫秒级略有差异(.543和.546),表明这些事件几乎同时发生。
-
日志级别:消息被记录为WARN,通常表示虽非错误但可能需要关注的情况,以防止潜在问题。
-
来源:警告源自
com.alibaba.druid.pool.DruidAbstractDataSource
,这是Druid JDBC连接池库的一个组件,广泛用于Java应用程序中管理数据库连接。 -
操作:“丢弃长时间未接收连接”描述的是连接池检测到某些数据库连接闲置(既未发送也未接收数据)超过了指定阈值,因此决定关闭它们。这有助于避免资源泄露,并确保应用使用新鲜、响应迅速的连接。
-
JDBC URL:受影响的数据库连接详情为
jdbc:mysql://192.168.10.169:3306/zhbs_temp
,指代一个运行在IP地址192.168.10.169、端口3306上的MySQL数据库,数据库名为’zhbs_temp’。连接字符串还包括如useSSL=false
来禁用SSL、useUnicode=true
和characterEncoding=utf-8
用于字符编码,以及时区和查询选项的设置。 -
版本:使用的Druid连接池版本是1.2.8。
-
lastPacketReceivedIdleMillis:这个值表示连接在被丢弃前处于空闲状态的持续时间(以毫秒计)。第一条日志中,连接空闲了68,637毫秒(约1分9秒),第二条日志中为109,880毫秒(约1分50秒)。这些时长超出了连接池配置的空闲超时限制,导致连接被丢弃。
建议行动:
-
检查连接池配置:审查Druid配置设置,特别是
maxIdle
和minEvictableIdleTimeMillis
属性,确保它们适合你的应用需求。minEvictableIdleTimeMillis
设置了连接可以被驱逐的最短空闲时间,你可能需要根据观察到的空闲时间和应用使用模式调整这一设置。 -
监控应用行为:观察应用是否有效地利用数据库连接并在不再需要时关闭它们。频繁地丢弃连接可能表明应用代码中存在资源管理不善或配置不当的问题。
-
调优:如果尽管配置适当但仍频繁出现空闲超时,考虑调整连接池大小设置(例如
initialSize
、maxActive
),以更好地匹配应用的峰值负载需求。 -
分析应用使用模式:调查为什么连接会被闲置这么长时间。这可能指示了低活动期,或是应用的特定部分未能有效管理数据库资源。
解决这些问题可以帮助优化数据库连接性,提升应用性能,并防止不必要的资源浪费。