如何解决 Redis CPU 使用率过高的问题?以及如何限制 Redis 的 CPU 使用率?

如何解决 Redis CPU 使用率过高的问题?以及如何限制 Redis 的 CPU 使用率?

我们继承了一个系统,其中有一个中央服务器用于排队操作。选择 Redis 作为排队代理。

偶尔(比如每 2-3 天)Redis 服务 CPU 使用率甚至会超过 100%。

在此处输入图片描述

我尝试阅读日志来找出原因:

tail /var/log/redis/redis-server.log

但它返回空结果。

在此处输入图片描述

我发现本文提出了一些建议。但是 Redis 不响应我的命令。

我现在很困惑,不知道该怎么办以及如何找到问题。另外,有没有办法限制 redis 的 CPU 使用量?

答案1

我也遇到了 redis CPU 使用率的问题。我的情况是 redis 连接数(客户端)很多,而 Linux 默认的 ulimit 为 1024 个打开文件。

高 CPU 使用率可能是由一些 CPU 密集型操作(如 smembers)引起的。

您还可以使用 SLOWLOG redis 命令来记录长时间运行的命令。

当没有日志和 SLOWLOG 结果时,您可以采取的最佳跟踪问题的方法就是 strace redis 进程并查看发生了什么。对于我来说,这是“打开文件过多”错误,但它只在 strace 输出中看到,通过将默认文件数限制增加到 1024 以上来解决。

答案2

默认情况下,Redis 不会对资源使用施加任何限制。因此,一切都取决于服务器的功能。我建议您对 Redis 进行限制配置:

  1. 编辑此文件:/etc/redis.conf

  2. 添加内存限制(以字节为单位):maxmemory 536870912

    (我的情况是 512mb,但你必须使用你想要/需要的 RAM 限制)

  3. 还添加以下规则行:maxmemory-policy volatile-lru

激活此规则后,当缓存maxmemory已满时,Redis 会从缓存中删除不常用的键,为新数据腾出空间。

如果您想了解更多信息,所有内容都在 中有详细的注释/etc/redis.conf

相关内容