我们继承了一个系统,其中有一个中央服务器用于排队操作。选择 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 进行限制配置:
编辑此文件:
/etc/redis.conf
添加内存限制(以字节为单位):
maxmemory 536870912
(我的情况是 512mb,但你必须使用你想要/需要的 RAM 限制)
还添加以下规则行:
maxmemory-policy volatile-lru
激活此规则后,当缓存maxmemory
已满时,Redis 会从缓存中删除不常用的键,为新数据腾出空间。
如果您想了解更多信息,所有内容都在 中有详细的注释/etc/redis.conf
。