美文网首页技术Code
Redis:Could not get a resource f

Redis:Could not get a resource f

作者: 搅尽脑浆 | 来源:发表于2018-12-19 10:20 被阅读0次
    redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool
    

    三种情况会导致这个异常

    • 没有释放redis池中的资源
    • redis pool 配置过小
    • 无法连接到redis

    异常排查

    • 首先检查代码里有没有释放资源
      检查代码后, 发现每次调用redis资源都执行了jedis原生的回收资源的close方法, 所以原因不在于此
    • 查看连接池配置, 发现连接池配置较小:
    MAX_ACTIVE = 512;
    MAX_IDLE = 100;
    

    API请求峰值在100qps, 每个请求会产生6个左右的redis请求, 也就是6个(可以优化为1个)redis资源. API部署在8个docker节点上, 平均每个节点80个redis资源, 性能时满足要求的.

    为了验证, 增大配置

    MAX_ACTIVE = 5120;
    MAX_IDLE = 1000;
    

    测试发现还是报异常, 说明不是配置资源的问题.

    • 检查docker集群是否能连接到redis
      找运维, 发现运维在做docker集群迁移时, 没有同步redis白名单, 导致docker无法访问redis, 导致异常
      同步白名单后, 异常解除

    总结

    对此异常不熟, 正确的排查顺序应是
    连接是否异常>>>是否释放资源>>>配置是否过小

    相关文章

      网友评论

        本文标题:Redis:Could not get a resource f

        本文链接:https://www.haomeiwen.com/subject/iqpdkqtx.html