-
Notifications
You must be signed in to change notification settings - Fork 8.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
1%概率出现GetConnectionTimeoutException: wait millis 5000, active 0, maxActive 60, creating 1 #5492
Comments
通常是每台客户端的maxActive设置太大了,全部客户端加起来的active连接总数超过了数据库服务端配置的最大连接数,获取连接一直等到超时也没有等到可用的连接。 |
服务端那边也问了,说是没有特别大的压力。而且客户端这边进行创建连接的时候是成功的,这个监控是有的 |
不是数据库自己配多少就行的,操作系统的tcp配置参数是否能支持这么多,不是数据库自己就确定的,需要tcpdump抓包分析数据库连接tcp报文,不是简单执行以下top看看cpu和内存就能判定的事情。 |
我这边主要是监控druid建立连接的时候没有异常,而且都很快,所以应该不是你说这种情况? |
|
请问一下之前说的“filter之后没有重置filterChain的pos,filterchain只执行一次,你的filter统计值大概率只用了一次”这个问题是存在的吗?因为connect监控到的数据确实少。但我看大佬你后面编辑了,所以是不是有这个问题呢?因为连接一直很快所以很困惑. 对于你说的“你应该关注那个正在执行createPhysicalConnection创建连接操作的线程为什么没有在5ms内完成创建,等了5秒也没完成创建。”,如果监控没问题的话,那就是createPhysicalConnection一直很快成功,可是却无法拿来使用。(active=0)所有的线程都在等这个连接却等不到,感觉说不通?所以如果createPhysicalConnection的filter chain是不是有问题呢? |
我看了一下druid 1.2.3代码,没有filterchain执行次数的问题,所以我改了回复内容。 |
这个问题最近两个月只出了2次,目前在本地没有重现。创建连接的task看起来很少日志,我全局搜了日志也没看到创建失败的,所以是不是可以认为创建就是没问题的?我的filter代码可以贴出来:
|
建议在Cat.newTransaction和Cat.newTransaction方法调用前后获取一下当前时间戳,计算一下方法调用的耗时,耗时超过100ms写一条告警日志吧。 |
Cat.newTransaction就是new一个对象而已,目前看来没什么开销的。“druid之前的连接池管理的确有一些缺陷”能具体说说吗 |
并发线程数多了会出现锁竞争,获取连接和返还连接都会变慢,受当前设计框架所限,druid适合的场景是每个客户端只有20个以下的并发数据库连接需求(maxActive < 20),像你这种60个线程的,本身就不适合采用druid。 |
我也遇到了同样的问题,不知道为什么重启服务后就好了,也是偶发性 |
你是什么版本?也是active=0吗? |
Caused by: com.alibaba.druid.pool.GetConnectionTimeoutException: wait millis 60000, active 0, maxActive 40, creating 1, createElapseMillis 1633095 |
amazing 简直一样。而且这个active=0应该是不准确的,因为我能检测到不停的有连接创建和回收,而且testwhileIdle的日志也有 |
GetConnectionTimeoutException 这个问题解决了吗?我也遇到了同样的问题,错误信息如下: |
没解决呢,最近好像发生概率比较低,你也是偶发的吗,什么版本? |
记录一个类似的情况,应用启动的时候获取不到连接,MySQL服务端连接数查过远没有到上限。不过通过设置 Druid version: 1.2.22
|
线上应用偶发会出现GetConnectionTimeoutException(全都是active=0),并且一出现就有点停不下来(有时候持续几分钟,有时候持续几个小时)出现这个问题都比较偶然,跟流量大小似乎关系不大。而且出现这个问题后在这段时间内的getconnection()有1%的概率会出现这个超时(这个比例貌似和分库有关,但还不确定),与其同时其他的getConnection情况正常。
另外我有实现FilterEventAdapter,发现connection_connect的时候是很快的(都在5ms左右)。
现在这几个问题非常费解
Cause: com.alibaba.druid.pool.GetConnectionTimeoutException: wait millis 5000, active 0, maxActive 60, creating 1, createElapseMillis 7051063
; wait millis 5000, active 0, maxActive 60, creating 1, createElapseMillis 7051063; nested exception is com.alibaba.druid.pool.GetConnectionTimeoutException: wait millis 5000, active 0, maxActive 60, creating 1, createElapseMillis 7051063
at org.springframework.jdbc.support.SQLStateSQLExceptionTranslator.doTranslate(SQLStateSQLExceptionTranslator.java:120)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:72)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81)
com.alibaba.druid.pool.GetConnectionTimeoutException: wait millis 5000, active 0, maxActive 60, creating 1, createElapseMillis 7051063
at com.alibaba.druid.pool.DruidDataSource.getConnectionInternal(DruidDataSource.java:1738)
at com.alibaba.druid.pool.DruidDataSource.getConnectionDirect(DruidDataSource.java:1408)
at com.alibaba.druid.filter.FilterChainImpl.dataSource_connect(FilterChainImpl.java:5059)
at com.xx.xx.xx.druid.filter.XxxDruidMonitorFilter.dataSource_getConnection(BcfDruidMonitorFilter.java:52)
The text was updated successfully, but these errors were encountered: