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

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

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

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

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

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来删除,命令以下:spa

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写功能暂时恢复,可是还需对其进行优化和整理,例如按期清理一些无用的数据等vagrant

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');

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

相关文章
相关标签/搜索