1.发现问题
生产环境发现有一些redis报错日志 connection pool exhausted。如果redis中没有数据 就直接回源 查DB。暂时不会有什么大问题。中文意思是连接池耗尽。
2.追踪问题
查看源码
我们用的redis客户端类似于redigo 按照错误提示搜索到了一段代码(基于最新的redigo 源码版本分析)

 // Handle limit for p.Wait == false.if !p.Wait && p.MaxActive > 0 && p.active >= p.MaxActive {p.mu.Unlock()return nil, ErrPoolExhausted}

源码解析
这段代码的意思是 如果没有配置为等待模式。且配置了连接池的最大活跃个数 如果当前活跃个数大于配置的最大活跃 则返回连接池耗尽的错误。所以需要调大这个MaxActive参数。

MaxIdle 参数
除了MaxActive 之外还有一个MaxIdle参数。

func (p *Pool) put(pc *poolConn, forceClose bool) error {p.mu.Lock()if !p.closed && !forceClose {pc.t = nowFunc()p.idle.pushFront(pc)if p.idle.count > p.MaxIdle {pc = p.idle.backp.idle.popBack()} else {pc = nil}}if pc != nil {p.mu.Unlock()pc.c.Close()p.mu.Lock()p.active--}if p.ch != nil && !p.closed {p.ch <- struct{}{}}p.mu.Unlock()return nil}

连接池的具体实现是通过一个链表来实现的。如果发现连接池里面的空闲个数超过了MaxIdle,就会把尾部的连接删除 把最新的连接放到头部。类似将老的连接删掉,加入最新的。

3.解决问题
最终通过调大 MaxActive 和 MaxIdle 参数解决了连接池耗尽的问题

connection pool exhausted相关推荐

  1. Cannot get a connection, pool exhausted, cause: ValidateObject failed

    连接池突然不能使用了,重启应用仍然报连接池耗尽,最后debug发现是有人创建了dual表,导致校验语句select 1 from dual返回值为空,而无法通过连接池的连接校验. Caused by: ...

  2. com.atomikos.jdbc.AtomikosSQLException: Connection pool exhausted

    异常: 2020-01-09 18:30:48.072 ERROR 10212 --- [nio-8080-exec-2] o.a.c.c.C.[.[.[/].[dispatcherServlet] ...

  3. psycopg2.pool.PoolError: connection pool exhausted

    psycopg2.pool 数据库连接池用完的两种情况: sql报错, 导致数据库的链接putconn失败, 没有将conn添加到数据连接池中 真的有那么连接建立, 假设连接池有100个数据库连接, ...

  4. .Net与Oracle地数据库连接池(Connection Pool)

    .Net与Oracle的数据库连接池(Connection Pool) 概述: 数据库连接池允许应用程序重用已存在于池中的数据库连接,以避免反复的建立新的数据库连接.这种技术能有效提高应用程序的伸缩性 ...

  5. java.lang.IllegalStateException: Connection pool shut down

    最近使用HttpClient 4.5 使用 CloseableHttpClient 发起连接后,使用CloseableHttpResponse 接受返回结果,结果就报错了,上网查了下,有位stacko ...

  6. Cannot get a connection, pool error Timeout waiting for idle object (获取不到数据库连接)...

    今天项目中遇到一个问题,一个定时器一段时间就会报错,一段时间又正常,错误如下: Caused by: org.hibernate.exception.GenericJDBCException: Can ...

  7. Connection pool shut down http请求异常关闭

    本人在项目运用中写了一个数据推送的组件,需要多线程频繁调用远程接口进行传输数据,远程请求通过HttpClient 使用 CloseableHttpClient 发起连接后,使用CloseableHtt ...

  8. 多线程下httpClient报错 Connection pool shut down

    报错信息 1.报错信息:Connection pool shut down java.lang.IllegalStateException: Connection pool shut downat o ...

  9. 阿里oss上传,读取报错:Connection pool shut down

    Connection pool shut down报错: 今天springboot配置了阿里oss配置类:就一直报错: com.aliyun.oss.ClientException: Connecti ...

  10. 数据库连接池 Connection Pool 是什么,做什么

    重新拾起Java来学,就遇到了一本不错的书<Hibernate 深入浅出>电子工业出版社,相较其他的工具类书,本书中用词更加生动活泼,从字句之间就可以看出作者的用心与深厚的文字功底,让人相 ...

最新文章

  1. Lucene.net常见功能实现知识汇总
  2. Python使用request包请求网页乱码解决方法
  3. LeetCode每日一题 977. 有序数组的平方
  4. mysql几个timeout参数_MySQL中 timeout相关参数解析
  5. Day Two(Beta)
  6. stm32f103移植到f0_STM32F042替换STM32F103
  7. 灯亮怎么办_车辆隔音效果不好怎么办?
  8. 目前计算机应用最广泛的区域是,自考《计算机应用基础》试题练习(一)
  9. SpringBoot使用AutoConfiguration自定义Starter
  10. rviz可视化点云_ROS_PCL+Rviz创建点云并三维显示
  11. python中0x3f_Python学习笔记(一):基本数据类型
  12. 2020-8-4 Codeforces摸鱼报告
  13. python读取raw数据文件_pythonrawkit如何从原始文件读取元数据值?
  14. Solr分组聚合查询之Facet
  15. 电脑变时钟,防止消息游戏新闻的打扰,形成高效率的办公和学习
  16. 解决HTML5页面在手机浏览器测试中发现 横向滚动条,尽管页面没有内容也是照常出现。
  17. 浏览器无法打开网页-重置网络命令
  18. 2022年东北大学计算机考研复试最低分数线
  19. 安装sqlserver2016报错
  20. 《深入浅出SQL》问答录

热门文章

  1. linux 内存管理(8) —内存描述符(mm_struct)
  2. 端午节之苍南懒人游 (*^__^*) ……
  3. 移动端页面底部导航被浏览器工具栏遮盖解决方法
  4. 成品、预售、老店翻新、教练:邀约话术(绝干干货)-健身房管理系统结捷径系统
  5. zoj 3551 Bloodsucker 概率DP
  6. [CnPeng说]低代码并不Low
  7. CODE【VS】2809 盗窃-月之眼
  8. 一位16年老员工的反思:什么才是真正的执行力?
  9. (翻译)社会认同模式(Social proof)
  10. becon帧 wifi_beacon帧