当前位置:首页 > 文章列表 > 数据库 > Redis > Redis INFO commandstats 如何定位单命令 CPU 异常:calls、usec_per_call 与采样边界

Redis INFO commandstats 如何定位单命令 CPU 异常:calls、usec_per_call 与采样边界

来源:17golang原创 2026-08-29 17:37:15 0浏览 收藏

线上 Redis 的 CPU 曲线突然抬头时,直接盯着 instantaneous_ops_per_sec 往往只能看到“忙”,看不出是哪条命令把 CPU 吃掉了。更稳妥的办法是连续采两次 INFO commandstats,用 calls 增量确认调用量,再结合 usec_per_call 和失败计数判断是调用变多、单次变重,还是请求已经在命令层被拒绝。

定位单命令 CPU 异常,不要只按累计值排序;至少比较同一窗口里的 calls 增量、usec 增量和失败计数,并把结果与业务流量变化对齐。

要点速览
  • calls 说明命令真正进入执行的次数,不能直接等同于客户端发起次数。
  • usec_per_call 是累计 CPU 微秒的平均值,必须和采样窗口、调用量一起看。
  • rejected_callsfailed_calls 能帮助区分容量拒绝和执行失败。
  • Redis 7 起部分命令统计会拆到子命令,比较历史数据时要先确认统计粒度。

先把 Redis CPU 异常拆成三个问题

同样是 CPU 上升,处理方式可能完全不同:请求量变大属于容量问题,某条命令的平均 CPU 变高更像数据规模或参数变化,failed_calls 上升则要回到调用方检查参数和数据类型。第一步不是重启 Redis,而是把“忙在哪里”固定下来。

redis-cli INFO stats
redis-cli INFO commandstats

INFO 的执行复杂度是 O(1),但返回整段统计;排查时优先请求 commandstats,减少人工阅读范围。示例中的一行可能是:

cmdstat_hget:calls=18420,usec=92100,usec_per_call=5.00,rejected_calls=0,failed_calls=2

这行只能说明从 Redis 进程启动或统计重置以来的累计情况,不能单凭 5 微秒断言当前请求一定快。

用两次快照判断调用变多还是单次变重

把第一次快照记为 A,间隔一段真实业务时间后记为 B。对同一个 cmdstat_* 项分别计算 Δcalls = B.calls - A.callsΔusec = B.usec - A.usec,窗口平均 CPU 约为 Δusec / Δcalls。如果 calls 增长很快而平均值稳定,优先看流量或重试;如果 calls 增长不大但平均值显著抬高,再查 key 大小、参数范围和数据结构。

Redis INFO commandstats 两次快照通过 calls 增量和 usec 增量区分调用变多与单次变重

实际记录时至少保留时间戳、命令名、calls、usec、usec_per_call 和业务请求量。不要把不同重启周期的累计值直接相减,也不要在采样中间执行会重置统计的操作后继续拼接窗口。

观察结果更可能的方向下一步
Δcalls 大,平均 CPU 稳定调用量、重试或流量上升对齐客户端请求数与重试计数
Δcalls 小,Δusec 明显变大单次命令成本上升核对 key 体积、成员数量和参数
failed_calls 上升命令执行失败检查数据类型、参数与调用方日志
rejected_calls 上升命令被拒绝检查资源保护、客户端限流和实例状态

把 commandstats 字段和业务症状对上

calls 是到达命令执行层的次数,usec 是该命令累计消耗的 CPU 微秒,usec_per_call 是平均值。它们回答的是 Redis 进程内部的成本,不包含客户端排队、网络往返或连接池等待。

failed_callsrejected_calls 不要混为一谈:前者表示执行过程失败,后者表示请求在执行前被拒绝。两者都为零也不代表业务正确,只能说明这两个统计项没有记录到异常。

Redis commandstats 从 calls 与 usec_per_call 到业务流量、参数规模和失败计数的排查路径

Redis 7 及之后,某些命令会按子命令分别统计。例如 ACL 相关调用可能出现带子命令的统计键。做版本升级前后的对比时,先确认 cmdstat_* 的命名粒度发生了什么变化,否则很容易把“统计拆分”误判成“调用突然减少”。

三个容易误判的采样边界

累计平均值不是当前 P99

usec_per_call 是累计平均 CPU,不是端到端延迟,也不是 P99。它适合发现趋势和做同窗口比较;长时间运行后,早期的轻请求仍会稀释最近的重请求。

空窗口不能下结论

如果两次采样之间 Δcalls 为零,就不要计算平均值,更不能用旧的累计 usec_per_call 代替本窗口结果。延长观察窗口或等待该命令再次出现即可。

统计粒度变化要单独记录

升级 Redis、切换代理或改变客户端命令组合后,命令名和子命令统计可能发生变化。排查记录中应同时保存 Redis 版本、采样命令和完整的相关 cmdstat_* 行。

从定位到修复的最小闭环

先保存两次原始输出,再做差分;接着把异常命令和业务接口、key 模式、参数范围对应起来。若是 calls 增长,先处理调用放大、重试和批量策略;若是单次成本变高,优先限制单请求处理的数据规模。修改后用同样的采样窗口复测,确认 Δusec / Δcalls 回落,同时检查失败计数没有被转移到另一条命令。

这里别急着把 usec_per_call 当成唯一告警阈值。不同命令、不同数据集的正常成本差别很大,告警更适合使用“同命令基线 + calls 增量 + CPU 总量”的组合条件。

相关问题

为什么 calls 和客户端请求数对不上?

客户端可能在连接池、代理或重试层重复发起请求,而 commandstats 统计的是到达 Redis 命令执行层的调用;还要考虑事务、脚本和子命令统计粒度。

usec_per_call 高就一定是慢查询吗?

不一定。它是 Redis 进程内的平均 CPU 消耗,不等同于完整请求延迟;网络、排队和客户端等待需要结合其他指标核对。

什么时候应该清零统计再观察?

只有在你能接受丢失累计基线、并且已保存原始快照时才考虑重置。多数线上排查优先用两次快照做差,避免影响其他审计记录。

总结

Redis INFO commandstats 最有价值的不是给出一个漂亮的排序,而是把 CPU 异常拆成可验证的差分:调用量是否增加,单次 CPU 是否变重,执行失败或拒绝是否同步上升。固定采样窗口、保留原始字段、核对版本粒度,才能让修复后的复测结果真正可比较。

版本声明
本文转载于:17golang原创 如有侵犯,请联系study_golang@163.com删除
雾蓝苔藓温室手机壁纸提示词:锁屏上方留白与玻璃雨痕构图雾蓝苔藓温室手机壁纸提示词:锁屏上方留白与玻璃雨痕构图
上一篇
雾蓝苔藓温室手机壁纸提示词:锁屏上方留白与玻璃雨痕构图
GitHub 网页如何查看单个文件历史:从仓库入口定位提交差异
下一篇
GitHub 网页如何查看单个文件历史:从仓库入口定位提交差异
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    543次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    516次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    500次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    485次学习
查看更多
AI推荐
  • ljg-skills -
    ljg-skills
    ljg-skills 是李继刚开源的 AI 技能与提示词集合,面向大模型使用者整理了一批可复用的 prompt、角色设定和任务技能模板,适合用于学习提示词设计、搭建个人 AI 工作流和沉淀团队常用智能体能力。
    5427次使用
  • MELO音乐 - AI 音乐生成平台,支持多模态创作能力
    MELO音乐
    MELO音乐是一站式AI视频与音乐制作助手,对标suno, udio的高品质体验。提供伴奏生成、原创写词、无损导出、哼唱识曲、混音变声等全套音频与短视频编辑工具。无论是流行Kpop、电音说唱、民谣古风、摇滚儿歌还是商用轻音乐,MELO为你免费谱曲,轻松做同款!
    4911次使用
  • UniScribe - AI 免费在线音视频转文字平台
    UniScribe
    UniScribe 是一款 AI 音视频转文字与内容整理工具,支持上传音频、视频文件或粘贴 YouTube 链接,自动生成转写文本、摘要、思维导图和关键问题,并支持多格式导出,适合会议记录、课程学习、访谈整理和内容创作复盘。
    4836次使用
  • 剧云 - 免费 AI 智能中文剧本创作平台
    剧云
    剧云是专业中文剧本创作平台,安全稳定运行十余年,集成AI编剧、剧本医生审核、人物小传、剧情关系图、大纲编写、多人协作、Word导入导出、版权管控功能,数据安全防护,轻松高效创作剧本。
    5097次使用
  • 万象有声 - AI 一站式有声内容创作平台
    万象有声
    万象有声,一个专为有声创作者打造的新一代智能有声内容创作平台。平台提供专业的智能拆章、智能画本编辑、AI配音、AI生成音效、后期制作、智能对轨、智能审听等有声创作全流程工具,可以帮助创作者高效、低成本创作出引人入胜的有声作品。立即体验,让有声书制作更简单!
    5056次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议隐私政策
返回登录
  • 重置密码