你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
排查 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 规划常见问题解答。
有关内存管理的建议,请参阅内存管理的最佳做法。
长时间运行的命令
本部分已移到其他位置。 有关详细信息,请参阅长期运行的命令。
服务器端带宽限制
本部分已移到其他位置。 有关详细信息,请参阅网络带宽限制。