前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Redis Lua内存清理的灾难

Redis Lua内存清理的灾难

原创
作者头像
于航
修改2021-02-22 11:19:29
2.4K0
修改2021-02-22 11:19:29
举报

灾难现场

客户需要清理lua内存,于是按照标准动作执行了script flush。发现系统直接hang住了,请求无法执行,超时报错。

开始排查

此时我们开始怀疑是否是清理内存导致了系统hang主,拨测失败,导致HA。然后我们进行了排查验证,果然在管控系统日志中发现了端倪

管控系统HA切换记录
管控系统HA切换记录

然后我们看下当前的lua内存到底是多少?

lua内存
lua内存

果不其然,25G内存清理确实非常耗时,由于腾讯云4.0标准版的redis其实是引入arbiter节点当做集群版来管理,因此我们需要调大节点的timeout值,可以使用config get获取当前值,默认值为

代码语言:txt
复制
cluster_node_timeout 15000

可以看到默认值是15秒,于是我们将该值调整为100秒,重新约定时间,然后客户重新发起。尴尬的情况发生了。

再一次发生了HA切换
再一次发生了HA切换

左右为难

又1次发生了HA切换,命令仍然未执行成功。既然不能云上测试,又不敢随便修改这个值,我们是希望能够通过准确的模拟估计出这个值的大小。于是按照如下方案:

  • 先下载备份然后恢复到一个单机版实例
  • 执行flush script测试耗时
  • 调高cluster node timeout
  • 返回线上集群执行

通过导入备份还原一个单机版实例,我们测试的结论如下

单机版执行结论
单机版执行结论

然后再次执行就没问题了

代码语言:txt
复制
used_memory_lua:41984
used_memory_lua_human:41.00K
used_memory_scripts:624

小结

建议如果需要清理,不要堆积到几十个G的时候再进行操作,否则很容易导致HA切换。特别是不要再占用内存很高的情况下使用script flush

Lua占用内存为25.15G,是极不合理的,如果读者遇到这种情况,建议排查内存泄露或者是否使用了动态生成脚本的方式

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 灾难现场
  • 开始排查
  • 左右为难
  • 小结
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档