Hiredis超时并发有大量并发请求

时间:2014-03-18 04:30:05

标签: c redis varnish hiredis

我正在使用名为libvmod-redis的Varnish的redis集成插件。我看到一个问题,如果我得到大量并发请求,大约350,redis开始超时,我最终在Varnish中得到段错误。

我收到这些错误:

varnishd[27892]: Child (27893) said redis error (connect): Connection timed out
varnishd[27892]: Child (27893) said redis error (command): err=1 errstr=Connection timed out
varnishd[19528]: Child (19529) said redis error (command): err=1 errstr=select(2): Invalid argument
varnishd[19528]: Child (19529) said redis error (command): err=1 errstr=Connection timed out
varnishd[19528]: last message repeated 9 times
varnishd[19528]: Child (19529) said redis error (command): err=1 errstr=select(2): Invalid argument
varnishd[19528]: Child (19529) said redis error (connect): fcntl(F_GETFL): Bad file descriptor
varnishd[19528]: Child (19529) said redis error (command): err=1 errstr=fcntl(F_GETFL): Bad file descriptor
kernel: [282284.005658] varnishd[19727] general protection ip:7f1f9dea1427 sp:7f1f4123c120 error:0 in libhiredis.so.0.10[7f1f9de9f000+9000]

我的超时是1秒,我正在为Redis使用ElastiCache节点。我想知道究竟什么可能在这里失败。我不是C的专家,所以我觉得我错过了什么。

2 个答案:

答案 0 :(得分:1)

看到代码会很有趣,特别是在select附近。 由于您有很多并发请求,因此最好检查文件描述符的有效性:在此过程中可能会关闭它们...

答案 1 :(得分:1)

您可以尝试以下方法:

  • 首先,如果问题是Redis服务器,请尝试使用redis-cli --latency。如果redis-cli从其角度来看没有延迟问题,则问题在于客户端。
  • 如果问题出在服务器上,您可能需要遵循以下指南:http://redis.io/topics/latency