C 具有大量并发请求的Hiredis超时

C 具有大量并发请求的Hiredis超时,c,redis,varnish,hiredis,C,Redis,Varnish,Hiredis,我正在使用一个名为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=Conn

我正在使用一个名为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方面的专家,所以我觉得我遗漏了一些东西

查看代码会很有趣,尤其是在
select
周围。
由于您有许多并发请求,因此最好检查文件描述符的有效性:可能在处理过程中关闭了其中的一个…

您可以尝试以下操作:

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