数据库连接池设置多少合适,一个生产问题导致程序 6 个节点假死

50 天前
 xiumuzidiao

最近公司的某个程序发生假死( java ,springboot ),导出 dump 文件后,发现 tomcat 的 200 个线程全卡在了 getConnecton()获取数据库连接上。 然后查了一下数据库的空闲连接数大概有 5000 ,没有达到 oracle 的 10000 个上限,但是其它的程序也有获取连接慢的情况。但是我的程序就卡死在获取连接上,为什么我的连接池没有返回连接呢??

2710 次点击
所在节点    数据库
29 条回复
xiaogu2014
49 天前
```理论上应该设置一个 pod 的 max-connections.```
然后数据库的 active connection/max connection/idle connection/query time 等等这些指标都应该作为监控来作为调整配置的决策因素。
引申开来包括程序线程池的使用情况。
起个项目来优化这些吧。然后推广到公司。credit 不来了吗。
RobinzzZ
49 天前
设置一个超时时间把,一直等也太傻了
Outer2048
49 天前
没有合适的值,如果小了就扩大一倍,直到扩到不卡
当然扩大很多之后依然卡,问题应该不在数据库连接上
seedhk
49 天前
遇到过类似的,是超时时间的问题,顺便再解决下慢 SQL 。不然还早还会碰到。
liuhuan475
49 天前
用的什么连接池?楼上说的有道理,慢 sql 导致连接未释放,同一个 tomcat 线程配置了最大连接池数量,到了最大连接数数会阻塞获取连接池。1.排查慢 sql 。2.修改连接超时时间
me1onsoda
49 天前
多大配置的数据库啊。。设置了 10000 个连接数
xiumuzidiao
49 天前
已复现,dbcp2 的线程池里的所有连接在 idle 变成 active 失败或者去 validate 失败,idle 连接会 destroy ,然后其它线程造成死锁的现象,本地可以复现,链接: https://issues.apache.org/jira/projects/POOL/issues/POOL-407?filter=allopenissues
FawkesV
48 天前
我也遇到过,多线程连接池打满了。连接池配置的问题,默认 10
ilucio
26 天前
不仅仅是连接池的问题,首先排查占用 sql 连接池的原因,1 )慢 SQL 2 )数据库服务太拉胯了;然后在调整连接池参数,一般 100 个左右就够了,单个应用开太多链接也会造成数据库 server 的连接池的浪费

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1092183

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX