【问题标题】:Hiredis timeout with large number of concurrent requestsHiredis 超时与大量并发请求
【发布时间】:2014-03-18 04:30:05
【问题描述】:

我正在为 Varnish 使用一个名为 libvmod-redis 的 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 方面的专家,所以我觉得我错过了一些东西。

【问题讨论】:

    标签: c redis varnish hiredis


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      您可以尝试以下方法:

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

      【讨论】:

        猜你喜欢
        • 2017-04-06
        • 1970-01-01
        • 1970-01-01
        • 2019-02-25
        • 1970-01-01
        • 2011-02-26
        • 2017-03-16
        • 2019-11-19
        相关资源
        最近更新 更多