Redis有序集合的CPU性能

4
我们正在运行Redis,并每秒进行数百次有序集合键的增量操作,同时每秒也有数千次对有序集合的读取操作。
这似乎运行良好,但在高峰期负载时,CPU使用率会变得非常高,达到了单个核心的80%。有序集合本身是几千个键的小内存占用。
CPU使用率增加可能是由于每秒数百次的增量操作还是数千次的读取操作?了解这两者都会影响性能,但哪一个影响更大?
鉴于此,我们需要监视哪些最佳指标来检查这些瓶颈问题?
1个回答

5

需要检查的一点是,已排序集合是否足够小以被Redis序列化。例如,“debug object”可以应用于一些排序集合的样本中,以检查它们是否被编码为ziplist。

ziplist使用内存换取CPU,特别是当排序集合的大小接近阈值(在配置文件中为zset-max-ziplist-entries、zset-max-ziplist-value)时。

假设排序集合没有被ziplist编码,我认为CPU使用率很可能是由每秒数千次的读取而不是每秒数百次的更新造成的。对zset的更新是一个log(n)操作。它非常快,并且与Redis无关的锁定延迟。对zset项目的读取是一个O(n)操作,可能导致构建和返回大缓冲区给客户端。

为了确保,您可能需要生成只读流量,检查CPU,然后停止它,生成更新流量,再次检查CPU并进行比较。

zset读取操作的性能应该接近于Redis benchmark中可以找到的LRANGE性能。对于包含数千个项目的zset,几千TPS似乎符合典型的Redis性能水平。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接