Redis爆了?快速定位Redis占用最高的key有哪些


声明:本文转载自https://my.oschina.net/u/2394701/blog/1556379,转载目的在于传递更多信息,仅供学习交流之用。如有侵权行为,请联系我,我会及时删除。

1.首先cp一份dump.rdb到另外的目录(一般redis的持久化以rdb的方式存储,在redis配置文件可以找到dump.rdb的存储路径)

2.用rdbtools工具生产内存报告,命令是 rdb -c memory,例子:

sudo rdb -c memory  /vagrant/dump.rdb >test.csv

(rdb文件越大,生成时间就長久)

3.报告生成后,结合用linux sort命令排序,根据內存列排序,找出最高的key有哪些。例子:

sudo sort -k4nr -t , test.csv > sort.txt

4.查看sort.txt的结果,一般能得出类似‘my_ranking_list’开头的集合占用最高,排在了前面。若要查看类似‘my_ranking_list’开头的总共占用了多少内存,可以用命令:

sudo cat sort.txt | grep ‘my_ranking_list’ | awk -F ',' '{sum += $4};END {print sum}'

5.我们得知了my_ranking_list这样的集合占用最多内存,而且很可能是业务已经不再需要,但是长期在内存中没清理的,我们可以删除了这些集合,可以用模糊匹配key来删除,命令如下:

redis-cli -h 127.0.0.1 -p 6379  keys 'my_ranking_list*' | xargs redis-cli -h 127.0.0.1 -p 6379 del

6.暂时清理了一下无用和占用大的key后,redis写功能暂时恢复,但是还需对其进行优化和整理,例如定期清理一些无用的数据等

PS:在这里分享一个和redis无关的小功能,就是php的错误级别日志功能。一般我们在生产环境,设置的错误级别都是error_reporting(0)。但是这样很不方便我们去查问题,所以我们可以用以下这个来记录正常的报错在日志中,而且不展示在用户的页面:

            error_reporting(E_ALL &  ~E_NOTICE);             ini_set('display_errors','0');             ini_set('log_errors','1');             ini_set('error_log', dirname(__DIR__).'/log/php_errors/'.date('Ymd').'.log');

这样有利于快速知道问题产生的错误报告,还有没事的时候可以看看日志有哪些地方是可以优化的

 

本文发表于2017年10月26日 07:25
(c)注:本文转载自https://my.oschina.net/u/2394701/blog/1556379,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如有侵权行为,请联系我们,我们会及时删除.

阅读 2170 讨论 0 喜欢 0

抢先体验

扫码体验
趣味小程序
文字表情生成器

闪念胶囊

你要过得好哇,这样我才能恨你啊,你要是过得不好,我都不知道该恨你还是拥抱你啊。

直抵黄龙府,与诸君痛饮尔。

那时陪伴我的人啊,你们如今在何方。

不出意外的话,我们再也不会见了,祝你前程似锦。

这世界真好,吃野东西也要留出这条命来看看

快捷链接
网站地图
提交友链
Copyright © 2016 - 2021 Cion.
All Rights Reserved.
京ICP备2021004668号-1