连接池超时获取不到连接的可能原因
平时工作用数据库连接池的时候,有时候会遇见超时获取不到的报错:
Connection is not available, request timed out after XXms.
但是,并不能一下子看出什么问题导致,因为可能性有蛮多:
1. 可能是真的连接池负载高了
这种情况,连接数达到最大连接数,并且所有连接都处于 active 状态, 一般有2个原因
1.1 流量突增
初步判断:qps 突增,大大超过原预估的连接池容量需求
进一步判断:
- 前端业务做活动(比如营销活动)没有告知后端/平台服务?
- soa 流量倾斜到某个机器?
- ...
1.2 处理变慢
处理变慢,连接归还连接池就慢,单位时间一个连接处理的请求数就降低
初步判断:sql耗时曲线增高
进一步判断: 这种情况会负载些 要综合看各项指标
- 可能是 机器fullgc了
- cpu、io抖动了
- 存在慢sql
- db抖动
- 数据库事务死锁
- 。。。
2. 连接建立失败
当然,有可能你发现连接池还没达到最大连接数,但是就是超时获取不到; 这时候很大的概率是db 连不上了,或者 机器和db之间的网络存在问题
这种比较好判断:可以进一步从报错堆栈中检查,是 socket timeout 还是其他什么具体原因
总结
同一个报错,可能有各种各样的原因,不要急于归结于一个点,要综合、客观地分析各种现象;
同时,建立完善的监控、埋点,以便快速收集客观、全面、时间递进的数据帮助排障; 比如第一类原因, 没有监控图标、没有曲线图,就需要你具备老道的经验,还得一个个的去检查,才能最后定位根因
本文来自博客园,作者:mushishi,转载请注明原文链接:https://www.cnblogs.com/mushishi/p/15830821.html
分类:
数据库连接池
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix