java 在高并发情况下调用 redis 返回数据很慢,一个命令执行 200+ms, 低并发正常情况下 10+ms ,有遇到过吗? 主要耗时就在 JedisPool.getResource()这个操作上
1
6IbA2bj5ip3tK49j 2016 年 9 月 19 日 我猜一下,应该是有连接池的。
高并发下池满了,获取连接需要等待。时间就耗在这儿了。可以调一下最大连接数量试试。 |
3
cvv 2016 年 9 月 19 日 WhenExhaustedAction 怎么设的
|
4
rrfeng 2016 年 9 月 19 日 JedisPool.getResource()
新建连接可能达到了某种隐形的限制。例如 socket 数量, fd , nofile 等等所以 poolsize 虽然没有上限,但是达到一定量之后自然就会资源不足。 先看看 pool 有多少连接,或者系统里 ss/netstat 看下程序一共有多少个 redis 连接。 |
6
9hills 2016 年 9 月 19 日 via iPhone 做压测,然后观察各种指标。只有这个信息不太好判断。
|
7
zts1993 2016 年 9 月 19 日 今天在 jedis 上发 issue 的是你吧。。。
我看到了。 JedisPool.getResource() 是因为你设置了 testOnBorrow 。这个会发一个 ping 然后 ping 卡住了。 卡住的原因还是 redis 阻塞了,比如大量 smemebers 或者 lrange 这样。 具体可以发一下 redis 的 slowlog 。看一下卡顿和长时间操作是否一致。 |
8
yonka 2016 年 9 月 20 日 应该不是连接耗尽吧? redis 一个正常请求占用连接的时间应该在个位 ms ,你的高并发得有多少啊?
|
11
x537196 OP @zts1993 redis 是使用的阿里云的实例,只能找阿里的人看日志了,现在已经把列表类的 key 转到另一个实例,单键值的 key 已经转移到 memcached 了,现在只能各种原因排查了
|
14
xchange 2016 年 9 月 20 日 @x537196 说不定是阿里云的问题,前天晚上我们的 redis cluster 挂了,然后昨天另外的 redis 实例部分 value 长度比较大的 key 取不出来……
|
15
Infernalzero 2016 年 9 月 20 日 你都发现时网卡跑满那原因都很明显了,序列化后存储体积过大,网络拥塞了所以慢,压缩下再存吧
|
16
x537196 OP @Infernalzero 网卡跑满是大部分是其他业务的流量, redis 的很少
|
17
iminto 2016 年 10 月 3 日
jedis 本身性能问题
|