如何监控 Redis pubsub 订阅的积压情况?

如何监控 Redis pubsub 订阅的积压情况?

正如记录的那样Google Code 上的一个问题当 Redis pubsub 客户端无法跟上向频道发布消息的速度时,Redis 会为该客户端维护不断增长的消息积压,随着时间的推移会使用越来越多的内存。

我想检测这种情况何时发生并收到警报,或者至少能够检查哪些 pubsub 订阅者有积压以及积压量有多大。有办法做到这一点吗?

答案1

错误描述https://code.google.com/archive/p/redis/issues/525不再存在。虽然没有记录在案的方法可以提前警告 PubSub 客户端无法跟上,但 Redis 会终止来自慢速客户端的连接,以防止内存耗尽,并通过其日志文件通知您。文档

输出缓冲区限制

... 客户端可能会发送更多命令,从而产生更多输出,以便 Redis 能够以更快的速度将现有输出发送到客户端。对于 Pub/Sub 客户端来说尤其如此,因为客户端无法足够快地处理新消息。

[这] 将导致客户端输出缓冲区增长并消耗越来越多的内存。出于这个原因,Redis 默认为不同类型的客户端设置输出缓冲区大小限制。达到限制后,客户端连接将关闭,并且事件将记录在 Redis 日志文件中。

Redis 使用两种限制:

  • 硬限制是一个固定的限制,一旦达到该限制,Redis 将尽快关闭客户端连接。

  • 软限制是一个取决于时间的限制,例如每 10 秒 32 兆字节的软限制意味着如果客户端的输出缓冲区连续 10 秒大于 32 兆字节,则连接将被关闭。

不同类型的客户端有不同的默认限制:

...

  • Pub/Sub 客户端的默认硬限制为每 60 秒 32 兆字节,软限制为每 60 秒 8 兆字节。

...

可以使用 CONFIG SET 命令在运行时更改限制,或使用 Redis 配置文件 redis.conf 永久更改限制。有关如何设置限制的更多信息,请参阅 Redis 发行版中的示例 redis.conf。

相关内容