排查 Azure 托管 Redis 服务器问题

本部分讨论由 Azure 托管 Redis 服务器或任何托管它的虚拟机上的条件导致的故障排除问题。

备注

本指南中的多个故障排除步骤包括了运行 Redis 命令和监视各种性能指标的说明。 如需更多信息和说明,请参阅 其他信息 部分的文章。

CPU 使用率过高

高 CPU 意味着 Redis 服务器繁忙,无法跟上请求,导致超时。 在左侧的“资源”菜单中选择“监视”,以检查缓存上的“CPU”指标。 在工作窗格中的“见解”下,可看到“CPU”图。 或者,你也可以在指标下的CPU中添加指标集。

以下是针对 CPU 过高时可考虑的一些选项。

纵向扩展或移动到更高性能层

若要提高性能,可考虑扩展到更大的缓存,并增加 CPU 核心数。 有关详细信息,请参阅性能层级

客户端连接数的快速变化

有关详细信息,请参阅避免客户端连接高峰

耗时较长或成本高的命令

有关详细信息,请参阅长期运行命令

规模化

缩放操作会消耗大量 CPU 和内存,因为此操作可能涉及在节点之间移动数据和改变群集拓扑结构。 有关详细信息,请参阅缩放

服务器维护

如果 Azure 托管的 Redis 遇到故障转移,来自该节点的所有发生故障的客户端连接会转移到仍在运行的节点。 由于连接增加,CPU 可能会急剧上升。 可以尝试重启客户端应用程序,以便在两个节点之间重新创建并重新分布所有客户端连接。

内存使用率较高

服务器上的内存压力可导致各种性能问题,这些问题会延迟请求的处理。 出现内存压力时,系统将数据分页到磁盘,这会使系统的性能大大降低。

以下列出了可能导致内存压力的一些原因:

  • 缓存中的数据即将达到容量上限
  • Redis 服务器出现大量内存碎片

当负载模式存储大小变化过大的数据时,可能会导致碎片。 例如,如果数据大小分布在 1 KB 到 1 MB 之间,便可能导致碎片。 如果从现有内存删除 1 KB 的密钥,1 MB 的密钥将无法填入内存,由此便会导致碎片。 同样,如果删除 1 MB 的密钥并添加 1.5 MB 的密钥,后者也无法填入现有回收的内存中。 这会导致不可用的闲置内存,并产生更多碎片。

如果 used_memory_rss 值是 used_memory 指标的 1.5 倍,内存中便会出现碎片。 若出现以下情况,碎片可能会导致问题:

  1. 内存使用率接近缓存的内存上限,或
  2. UsedMemory_RSS 高于内存上限(可能导致内存中出现页面错误)。

如果缓存碎片化且在高内存压力下运行,则系统会执行故障转移以尝试恢复驻留集大小 (RSS) 内存。

Redis 通过 used_memory 命令公开以下两项统计信息来帮助你识别此问题:used_memory_rss。 可以使用门户查看这些指标

可以通过多种可能的更改来帮助确保内存用量正常:

有关内存管理的建议,请参阅内存管理的最佳做法

长时间运行的命令

有关详细信息,请参阅长期运行命令

服务器端带宽限制

有关详细信息,请参阅网络带宽限制

其他信息