used_memory_peak 是什么
used_memory_peak 记录实例自启动以来 used_memory 达到过的最大值,配套的 used_memory_peak_perc 表示当前内存占峰值的百分比。它解决的是「当前值看不出来的问题」:间歇性批量任务、迁移导入、预热阶段造成的尖峰,只有峰值能留下痕迹,因此它是容量基线与事后复盘的核心字段。
基本信息
| 字段 | used_memory_peak、used_memory_peak_human、used_memory_peak_perc |
|---|---|
| 口径 | 历史最大的 used_memory |
| 刷新方式 | 由定时任务比对刷新,极短的瞬时尖峰可能漏记 |
| 生命周期 | 实例重启后按启动占用重置 |
| 配套字段 | MEMORY STATS 中的 peak.allocated |
| 主要用途 | 容量基线、事后复盘、maxmemory 水位设定 |
典型使用场景
- 复盘内存台阶:把峰值与发布、批任务、全量同步的时间点对齐
- 设定 maxmemory:水位应高于历史峰值,否则突发阶段会先触发淘汰
- 定位突发来源:峰值远高于当前值,说明存在间歇性大对象或批量任务
- 规格申报:向上申请资源要用峰值而不是当前值
- 监控校验:外部监控采集的峰值与实例内峰值互相印证
最小示例
最小示例
redis-cli INFO memory | grep -E 'used_memory_human|used_memory_peak_human|used_memory_peak_perc'
redis-cli MEMORY STATS | grep -A1 peak # 分配器口径的峰值
redis-cli CONFIG GET maxmemory # 当前水位设置
redis-cli INFO stats | grep -E 'evicted_keys|rejected_connections' # 是否已被动淘汰
for i in $(seq 1 30); do date; redis-cli INFO memory | grep used_memory_human; sleep 1; done # 秒级采样看尖峰相关字段读法
| 字段 | 含义 | 怎么用 |
|---|---|---|
| used_memory_peak | 历史最大已用内存 | 与业务事件对齐,定位尖峰来源 |
| used_memory_peak_human | 同上的人类可读格式 | 告警文案直接用,避免人工换算 |
| used_memory_peak_perc | 当前内存占峰值的比例 | 接近 100% 说明正处在历史高位 |
| peak.allocated | 分配器口径的峰值 | 与 used_memory_peak 口径不同,选一个做基线 |
峰值是实例内自记的,重启就重置;跨重启的长期基线必须由外部监控承担,否则重启之后就没有参照物了。
maxmemory 低于历史峰值,意味着预热或批量导入阶段就会开始淘汰;用「峰值加余量」来定水位,比用当前值稳妥。