客户需要清理lua内存,于是按照标准动作执行了script flush。发现系统直接hang住了,请求无法执行,超时报错。
此时我们开始怀疑是否是清理内存导致了系统hang主,拨测失败,导致HA。然后我们进行了排查验证,果然在管控系统日志中发现了端倪
然后我们看下当前的lua内存到底是多少?
果不其然,25G内存清理确实非常耗时,由于腾讯云4.0标准版的redis其实是引入arbiter节点当做集群版来管理,因此我们需要调大节点的timeout值,可以使用config get获取当前值,默认值为
cluster_node_timeout 15000
可以看到默认值是15秒,于是我们将该值调整为100秒,重新约定时间,然后客户重新发起。尴尬的情况发生了。
又1次发生了HA切换,命令仍然未执行成功。既然不能云上测试,又不敢随便修改这个值,我们是希望能够通过准确的模拟估计出这个值的大小。于是按照如下方案:
通过导入备份还原一个单机版实例,我们测试的结论如下
然后再次执行就没问题了
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 删除。