事故表现:redis 状态正常,但客户端不能使用,定位日志结论,redis内存申请不通过,导致中断用户操作
解决办法
1.解锁相关配置(不能解决根本问题,根本原因来源于开发 使用姿势不对)
两种解决办法
一.打开系统层始终同意分配内存(不建议)
编辑文件 /etc/sysctl.conf 添加 vm.overcommit_memory=1
内核参数overcommit_memory 它是 内存分配策略 可选值:0,1,2。 0,:表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。 1:表示内核允许分配所有的物理内存,而不管当前的内存状态如何。 2: 表示内核允许分配超过所有物理内存和交换空间总和的内存。
二.解锁redis rdb快照失败依然可以进行执行命令
redis.conf修改
stop-writes-on-bgsave-error no
2.rdb文件 排查key大小(推荐!!!)
需要准备python3、pip3 环境以及rdb文件
pip3 install rdbtools python-lzf
使用工具导入表格(文件越大,到处越慢)
rdb -c memory ../dump.rdb >test.csv
导出到Windows电脑 按照size_in_bytes 栏 降序 即可 排查出 占用内存最大的key,如图单个key 占用700m !!! 无语至极