系统工具速查
Redis 的延迟问题常常先体现在系统层面:CPU 线程占用、内存换页、磁盘写入压力、网络吞吐。把这些工具的时间窗口与 Redis 指标、延迟曲线对齐,才能判断尖峰是持久化、换页还是外部负载造成的,而不是凭感觉归因。
基本信息
| CPU 与线程 | top -H -p 进程、pidstat -t -p 进程 1 |
|---|---|
| 内存与交换 | free -m、vmstat 1(重点看 si/so) |
| 磁盘 | iostat -x 1(重点看 %util、await、写次数) |
| 网络 | sar -n DEV 1、ss -s |
| 采样时长 | 至少覆盖一个完整的尖峰周期 |
| 关联对象 | INFO persistence 里的 fork 与重写时间点 |
典型使用场景
- 延迟尖峰复盘:把延迟曲线与系统采样对齐,找出同期事件
- 判断是否被换出:换入换出计数非零说明内存已经在换页
- 持久化压力评估:磁盘利用率与等待时间高时写盘就是瓶颈
- 线程级观察:确认是主线程还是后台线程在吃 CPU
- 上架验收:新机器先跑一轮基线采样,作为后续对比的参照
最小示例
最小示例
top -H -p <redis_pid> # 线程级 CPU 占用
vmstat 1 30 # 内存换页与上下文切换,连续采样 30 次
iostat -x 1 30 # 磁盘利用率与等待时间
pidstat -t -p <redis_pid> 1 # 线程级上下文切换
sar -n DEV 1 10 # 网卡吞吐与错误计数
free -m # 内存与 swap 使用情况工具对照
| 工具 | 看什么 | 异常信号 |
|---|---|---|
| top -H | 线程级 CPU | 某线程长期接近单核满载 |
| vmstat | 换页与上下文切换 | 换入换出非零说明发生换页,延迟必抖 |
| iostat -x | 磁盘利用率与等待时间 | 利用率长期接近 100% 说明磁盘打满 |
| sar -n DEV | 网卡吞吐与错误 | 接近链路上限或错误计数增长 |
| free -m | 内存与 swap 使用 | swap 被占用在低延迟场景属于严重信号 |
采样要覆盖完整窗口:只跑几秒钟很难命中持久化与批任务的周期,结论容易失真。
命令执行是单线程:进程 CPU 到单核满载就是瓶颈信号,此时系统还有空闲核也帮不上忙,方向是减少重命令或分片。
swap 是低延迟的头号杀手:被换出的页重新载入会带来毫秒级停顿,宁可限制内存使用,也不要让实例被换出。