redis 故障排查

本贴最后更新于 1912 天前,其中的信息可能已经时移世异

redis 一次故障排查

在流量控制设计中,用 redis 缓存流量实时值,redis 中缓存中一个 key 的 values 值是个 set,并且 set 的值有 3w+,每个值的存储的是 string,大多在 6-7 位。所以一个键值对的大小就在 200k 以上。

监控图

null

可以看到 cpu usage, network usage 两项指标前半部分都很高。cpu 使用率有毛刺产生。

遇到这个问题,我记得 redis value 值太大,对 redis 的 qps 影响还是比较大的。在数据包大小在 1k 的时候是个性能拐点。

null

解决方案

  1. cpu、network 指标比较高

    流量限制是 10 分钟批量更新的,更新的数据及时维护在 redis 中,在对外接口上过滤之前也定时缓存一个流量限制变量(内部缓存),这样对 redis 获取流量限制操作在 10 分中只要操作一次。

  2. cpu 有毛刺

    观察毛刺时间间隔,基本是有规律的(1 分钟到 2 分钟一个脉冲),猜测跟定时有关。考虑从 redis 的日志触发。如下:

redis log file

sudo tail -f /var/log/redis/redis.log
18013:C 04 Jan 16:41:36.609 * RDB: 905 MB of memory used by copy-on-write
16206:M 04 Jan 16:41:36.630 * Background saving terminated with success
16206:M 04 Jan 16:42:37.018 * 10000 changes in 60 seconds. Saving...
16206:M 04 Jan 16:42:37.035 * Background saving started by pid 18074
18074:C 04 Jan 16:42:50.182 * DB saved on disk
18074:C 04 Jan 16:42:50.191 * RDB: 918 MB of memory used by copy-on-write
16206:M 04 Jan 16:42:50.289 * Background saving terminated with success

通过上面基本定位是数据落磁盘的 cpu 开销。跟 redis 的默认配置有关:

sudo vi /etc/redis.conf

null

参考文章

Trouble Shooting —— Enable AOF可能导致整个Redis被Block住,在3.0.6版本仍然存在 - 凝雨 - Yun

Redis 的性能幻想与残酷现实 - mindwind - 博客园

  • Redis

    Redis 是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。从 2010 年 3 月 15 日起,Redis 的开发工作由 VMware 主持。从 2013 年 5 月开始,Redis 的开发由 Pivotal 赞助。

    286 引用 • 248 回帖 • 44 关注
  • 推荐系统
    4 引用 • 10 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
请输入回帖内容 ...