排查 Azure Cache for Redis 服务器问题
本部分讨论如何排查因 Azure Cache for Redis 服务器或任何托管它的虚拟机出现状况而引起故障这类问题。
备注
本指南中的多个故障排除步骤包括了运行 Redis 命令和监视各种性能指标的说明。 有关详细信息和说明,请参阅其他信息部分的文章。
高服务器负载意味着 Redis 服务器繁忙,无法跟上请求,导致超时。 通过从左侧的“资源”菜单中选择“监视”,来检查缓存中的“服务器负载”指标。 在工作窗格中的“见解”下,可看到“服务器负载”图 。 或者,在“指标”下添加设置为“服务器负载”的指标。
以下是针对服务器负载过高时可考虑的一些选项。
横向扩展可添加更多分片,以便将负载分布到多个 Redis 进程中。 此外,请考虑纵向扩展缓存,以便获得具有更多 CPU 核心数的大小。 有关详细信息,请参阅 Azure Cache for Redis 规划常见问题解答。
有关详细信息,请参阅避免客户端连接高峰。
本部分已移到其他位置。 有关详细信息,请参阅长期运行的命令。
缩放操作会消耗大量 CPU 和内存,因为此操作可能涉及在节点之间移动数据和改变群集拓扑结构。 有关详细信息,请参阅缩放。
如果 Azure Cache for Redis 遇到故障转移,则所有客户端连接都会从发生故障的节点转移到仍在运行的节点上。 由于连接增加,服务器负载可能会急剧上升。 可以尝试重启客户端应用程序,以便在两个节点之间重新创建并重新分布所有客户端连接。
服务器上的内存压力可导致各种性能问题,这些问题会延迟请求的处理。 出现内存压力时,系统将数据分页到磁盘,这会使系统的性能大大降低。
以下列出了可能导致内存压力的一些原因:
- 缓存中的数据即将达到容量上限
- Redis 服务器出现大量内存碎片
当负载模式存储大小变化过大的数据时,可能会导致碎片。 例如,如果数据大小分布在 1 KB 到 1 MB 之间,便可能导致碎片。 如果从现有内存删除 1 KB 的密钥,1 MB 的密钥将无法填入内存,由此便会导致碎片。 同样,如果删除 1 MB 的密钥并添加 1.5 MB 的密钥,后者也无法填入现有回收的内存中。 这会导致不可用的闲置内存,并产生更多碎片。
如果 used_memory_rss
值是 used_memory
指标的 1.5 倍,内存中便会出现碎片。 若出现以下情况,碎片可能会导致问题:
- 内存使用率接近缓存的内存上限,或
UsedMemory_RSS
高于内存上限(可能导致内存中出现页面错误)。
如果缓存出现碎片,并且在高内存压力下运行,系统会进行故障转移,以尝试恢复常驻集大小 (RSS) 内存。
Redis 通过 INFO 命令公开以下两项统计信息来帮助你识别此问题:used_memory
和 used_memory_rss
。 可以使用门户查看这些指标。
验证是否已正确设置 maxmemory-reserved
和 maxfragmentationmemory-reserved
值。
可以通过多种可能的更改来帮助确保内存用量正常:
- 配置内存策略,对密钥设置过期时间。 如果存在内存碎片,则此策略可能还不足够。
- 配置 maxmemory-reserved 值,该值应足够大,可以抵消内存碎片造成的影响。
- 基于指标(例如已用内存)创建警报,以提前收到有关潜在影响的通知。
- 扩展到可提供更多内存容量的更大缓存大小。 有关详细信息,请参阅 Azure Cache for Redis 规划常见问题解答。
有关内存管理的建议,请参阅内存管理的最佳做法。
本部分已移到其他位置。 有关详细信息,请参阅长期运行的命令。
本部分已移到其他位置。 有关详细信息,请参阅网络带宽限制。