V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
x537196
V2EX  ›  Java

Jedis 在高并发情况下调用 redis 返回数据很慢,有遇到过吗?

  •  
  •   x537196 · 2016-09-19 16:01:00 +08:00 · 11250 次点击
    这是一个创建于 3012 天前的主题,其中的信息可能已经有所发展或是发生改变。

    java 在高并发情况下调用 redis 返回数据很慢,一个命令执行 200+ms, 低并发正常情况下 10+ms ,有遇到过吗? 主要耗时就在 JedisPool.getResource()这个操作上

    第 1 条附言  ·  2016-09-20 10:10:48 +08:00
    昨天在 github 上提了 issues 询问后,因为有多种原因造成这种情况,所以也没有确切的答案,
    现在监测到高峰时段,网卡跑满,今天尝试加一台服务器,看有没有缓解的情况
    17 条回复    2016-10-03 18:06:06 +08:00
    6IbA2bj5ip3tK49j
        1
    6IbA2bj5ip3tK49j  
       2016-09-19 16:25:08 +08:00   ❤️ 1
    我猜一下,应该是有连接池的。
    高并发下池满了,获取连接需要等待。时间就耗在这儿了。可以调一下最大连接数量试试。
    x537196
        2
    x537196  
    OP
       2016-09-19 17:55:18 +08:00
    @xgfan 最大连接数已经设置为无上限了
    cvv
        3
    cvv  
       2016-09-19 21:18:59 +08:00   ❤️ 1
    WhenExhaustedAction 怎么设的
    rrfeng
        4
    rrfeng  
       2016-09-19 21:27:53 +08:00   ❤️ 1
    JedisPool.getResource()
    新建连接可能达到了某种隐形的限制。例如 socket 数量, fd , nofile 等等所以 poolsize 虽然没有上限,但是达到一定量之后自然就会资源不足。

    先看看 pool 有多少连接,或者系统里 ss/netstat 看下程序一共有多少个 redis 连接。
    fxmqs
        5
    fxmqs  
       2016-09-19 21:40:10 +08:00   ❤️ 1
    @x537196 确实碰到过,个别请求 50 多 ms ,但大部分没问题,当时统计大概在 2%左右,因为不影响业务,所以没跟踪了。
    9hills
        6
    9hills  
       2016-09-19 22:05:03 +08:00 via iPhone   ❤️ 1
    做压测,然后观察各种指标。只有这个信息不太好判断。
    zts1993
        7
    zts1993  
       2016-09-19 22:17:55 +08:00   ❤️ 3
    今天在 jedis 上发 issue 的是你吧。。。


    我看到了。 JedisPool.getResource() 是因为你设置了 testOnBorrow 。这个会发一个 ping 然后 ping 卡住了。
    卡住的原因还是 redis 阻塞了,比如大量 smemebers 或者 lrange 这样。

    具体可以发一下 redis 的 slowlog 。看一下卡顿和长时间操作是否一致。
    yonka
        8
    yonka  
       2016-09-20 09:55:36 +08:00   ❤️ 1
    应该不是连接耗尽吧? redis 一个正常请求占用连接的时间应该在个位 ms ,你的高并发得有多少啊?
    x537196
        9
    x537196  
    OP
       2016-09-20 10:06:13 +08:00
    @cvv 这个应该是默认的
    x537196
        10
    x537196  
    OP
       2016-09-20 10:08:01 +08:00
    @rrfeng redis 连接数在 200 左右,高峰期到过 600 ,没有到过最大连接数
    x537196
        11
    x537196  
    OP
       2016-09-20 10:14:22 +08:00
    @zts1993 redis 是使用的阿里云的实例,只能找阿里的人看日志了,现在已经把列表类的 key 转到另一个实例,单键值的 key 已经转移到 memcached 了,现在只能各种原因排查了
    x537196
        12
    x537196  
    OP
       2016-09-20 10:16:24 +08:00
    @fxmqs 我这个波动比较大
    x537196
        13
    x537196  
    OP
       2016-09-20 10:19:14 +08:00
    @yonka redis 是没有问题的,就是 jedis 这边,可能是有哪个操作阻塞了,或者网络原因,导致了这个情况,现在排查中
    xchange
        14
    xchange  
       2016-09-20 11:03:30 +08:00   ❤️ 1
    @x537196 说不定是阿里云的问题,前天晚上我们的 redis cluster 挂了,然后昨天另外的 redis 实例部分 value 长度比较大的 key 取不出来……
    Infernalzero
        15
    Infernalzero  
       2016-09-20 12:11:12 +08:00   ❤️ 1
    你都发现时网卡跑满那原因都很明显了,序列化后存储体积过大,网络拥塞了所以慢,压缩下再存吧
    x537196
        16
    x537196  
    OP
       2016-09-20 12:42:41 +08:00
    @Infernalzero 网卡跑满是大部分是其他业务的流量, redis 的很少
    iminto
        17
    iminto  
       2016-10-03 18:06:06 +08:00
    jedis 本身性能问题
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5389 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 01:21 · PVG 09:21 · LAX 17:21 · JFK 20:21
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.