【问题标题】:Find the source of waves of latency from Redis using Node.js使用 Node.js 从 Redis 中查找延迟波的来源
【发布时间】:2021-06-20 11:41:21
【问题描述】:

我正在调查我的服务器上的一些延迟问题,我已经缩小了范围,但还不足以解决它。我希望对 Redis 或 Node.js 有更多经验的人可以提供帮助。

在一个每分钟调用几千次的函数中,随着网络流量的增加和减少,我向我的 redis 客户端发送了一个GET 请求,以检查一个进程是否完成。我注意到我的 Web 请求的延迟增加了,似乎 redis GET 命令占用了我的大部分服务器时间。这让我很吃惊,因为我一直认为 redis 总是很快的。如果我查看 Redis 的“花费时间”信息,它会说一切都在 700 微秒以下。

这与我在事务监控设置中看到的不符,因此我在代码中添加了一些日志记录:

const start = Date.now();
client.get(`poll:${submittedId}`, (err, res) => {
    console.log(`${Date.now() - start}`);
    //other stuff
})

现在我的日志打印出每个 redis GET 花费的毫秒数。我观察了一段时间,发现了一个令人惊讶的模式。

大多数时候,有很多 1s,偶尔会有 10 或 100 的数字。然后,周期性地,服务器上的所有 get 都会减慢,每次 get 完成最多需要几秒钟。然后过了一会儿,数字又回落了,事情又开始顺利了。

什么可能导致这种行为?

我试图调查的事情:

  1. 正如我所提到的,我已经梳理了 Redis 的性能数据,如 Heroku 的 redis 仪表板所示,它没有任何投诉或延迟峰值。
  2. 我确认所有这些请求都来自少数连接,因为我了解到打开和关闭太多会导致问题。
  3. 我研究了连接池,认为事务可能正在排队并导致积压,但互联网似乎说这对于 Redis 和 Node 来说不是必需的。

非常感谢花时间为此提供建议的任何人!

【问题讨论】:

    标签: node.js server redis latency node-redis


    【解决方案1】:

    似乎 Redis 在 bgsave 中被阻止了。检查是否

    1. 您的 Redis 已用内存很大。
    2. 使用 lastsave 命令确保 bgsave 跨度。
    3. 总是关闭 aof。
    4. 使用慢日志来确保其他命令是否被阻止。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-13
      • 1970-01-01
      • 2013-03-01
      • 1970-01-01
      • 2011-05-07
      • 2013-01-08
      • 2012-05-20
      相关资源
      最近更新 更多