redis参数调整

占用内存飙升

执行 redis-cli -h 192.168.0.151 -p 6379

执行 info

观察info信息,clients:有一点引起了怀疑: client_longes_output_list有些异常高。

服务端和客户端交互时,分别为每个客户端设置了输入缓冲区和输出缓冲区,这部分如果很大的话也会占用Redis服务器的内存。

client_longest_output_list高,应该是输出缓冲区占用内存较大,也就是有大量的数据从Redis服务器向某些客户端输出。

执行client list命令 redis-cli -h host -p port client list | grep -v "omem=0"

来查询输出缓冲区不为0的客户端连接,于是查询到祸首monitor。

monitor的模型是这样的,它会将所有在Redis服务器执行的命令进行输出,通常来讲Redis服务器的QPS是很高的,也就是如果执行了monitor命令,Redis服务器在Monitor这个客户端的输出缓冲区又会有大量“存货”,也就占用了大量Redis内存。

执行ps -ef | grep monitor,查找对应进程

参考:https://blog.youkuaiyun.com/chenleixing/article/details/50530419

 

### Redis 参数配置优化最佳实践 #### 一、持久化策略调整 对于主要用于缓存场景的Redis实例,建议不开启持久化功能。如果确实需要持久化能力,推荐关闭RDB持久化而启用AOF(Append Only File)持久化方式[^4]。 为了降低AOF重写带来的性能影响,应合理设定`auto-aof-rewrite-min-size`和`auto-aof-rewrite-percentage`参数值,防止过早触发自动重写操作;同时设置`no-appendfsync-on-rewrite=yes`选项,在执行BGREWRITEAOF过程中暂停向磁盘同步日志文件的操作,从而减轻可能造成的阻塞现象。 #### 二、内存管理调优 确保每台承载Redis服务的服务器都留有足够的剩余RAM空间用于处理FORK操作及后续的数据复制工作。单个Redis进程分配的最大内存量不宜过高,通常不超过8GB较为合适,这样既能加速分叉过程又能减小主从节点间的同步压力以及跨机器迁移数据时的风险。 针对存在大量大尺寸键的情况,应当考虑采用更合适的存储结构替代哈希表等默认形式,并尽可能拆分成多个较小规模的对象保存于不同位置之中。另外,自Redis 4.0起引入了UNLINK指令支持后台线程渐进式释放资源,可有效缓解即时销毁巨型条目所引发的时间延迟问题[^1]^5]。 #### 三、部署环境规划 避免在同一硬件平台上共置其他消耗大量计算力的应用程序比如Web服务器或是批处理作业调度器之类,以免相互争夺有限的处理器周期造成响应时间延长甚至超时错误的发生。同样道理,也最好不要让Redis与那些频繁读写的数据库引擎或者消息中间件共享同一套I/O设备以防带宽争抢导致整体吞吐量下降。 ```bash # 设置最大使用的内存大小为4G maxmemory 4gb # 当达到最大内存限制时采用LRU算法驱逐部分旧数据腾出地方给新的请求 maxmemory-policy allkeys-lru # 开启AOF并指定增量更新模式提高效率 appendonly yes appendfsync everysec # 控制何时启动AOF重写机制 auto-aof-rewrite-min-size 64mb auto-aof-rewrite-percentage 100 # 停止在重写期间追加记录到现有日志里边去 no-appendfsync-on-rewrite yes ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值