zabbix报警redis内存告急,在Redis配置文件中(一般叫Redis.conf),通过设置“maxmemory”属性的值可以限制Redis最大使用的内存,修改后重启实例生效。 也可以使用客户端命令config set maxmemory 去修改值,这个命令是立即生效的,但会在重启后会失效,需要使用config rewrite命令去刷新配置文件。 若是启用了Redis快照功能,应该设置“maxmemory”值为系统可使用内存的45%,因为快照时需要一倍的内存来复制整个数据集,也就是说如果当前已使用45%,在快照期间会变成95%(45%+45%+5%),其中5%是预留给其他的开销。 如果没开启快照功能,maxmemory最高能设置为系统可用内存的95%。
解决办法:通过redis-rdb-tools分析redis内存使用量。
wget https://github.com/sripathikrishnan/redis-rdb-tools/archive/master.zip
unzip master
cd redis-rdb-tools-master/
python setup.py install
导出excel命令:
rdb -c memory dump.rdb >/tmp/memory20161018.csv
导出后的表格为整个rdb的数据,通过grep或awk之后,即可统计出较大的key。
database | type | key | size_in_bytes | encoding | num_elements | len_largest_element |
0 | list | LIST_1 | 8428842346 | quicklist | 15789816 | 571 |
0 | hash | HASH_1 | 546987596 | hashtable | 108 | 9339385 |
0 | hash | HASH_2 | 144521196 | hashtable | 69 | 2387996 |
0 | hash | HASH_3 | 106840876 | hashtable | 62 | 2098227 |
0 | hash | HASH_4 | 55104748 | hashtable | 89 | 973438 |
0 | hash | HASH_5 | 50333660 | hashtable | 26 | 2053790 |
0 | hash | HASH_6 | 37103084 | hashtable | 57 | 812489 |
0 | hash | HASH_7 | 2639004 | hashtable | 132442 | 8 |
0 | list | LIST_2 | 231111 | quicklist | 424 | 571 |
0 | hash | ScoreKey | 52316 | hashtable | 617 | 8 |
0 | hash | Reco2 | 49732 | hashtable | 617 | 8 |
0 | hash | Reco2 | 49732 | hashtable | 617 | 8 |
0 | set | SET_TOKEN | 4196 | hashtable | 49 | 44 |