- 首页 >
- 问答 >
-
云计算 >
- Linux环境下Redis如何进行性能调优
Linux环境下Redis如何进行性能调优
小樊
38
2025-12-16 12:21:27
Linux环境下 Redis 性能调优实战
一 系统层面关键调优
- 内存分配策略
- 设置 vm.overcommit_memory=1,避免 fork 持久化时因内存超卖导致分配失败(Redis 日志常见告警)。临时生效:
sysctl vm.overcommit_memory=1;永久生效:写入 /etc/sysctl.conf。
- 透明大页 THP
- THP 会放大写时复制的单位,引发 写放大与延迟抖动。建议禁用:临时
echo never > /sys/kernel/mm/transparent_hugepage/enabled;持久化到 /etc/rc.local 或 systemd 启动项,重启 Redis 生效。
- 交换分区倾向
- 降低 vm.swappiness,减少 swap 触发,避免磁盘 IO 拖慢 Redis。建议:Linux ≥ 3.5 设为 1,< 3.5 设为 0;临时
sysctl vm.swappiness=1;永久写入 /etc/sysctl.conf。
- 文件描述符与连接队列
- 提升进程可打开文件数,避免 maxclients 受限。临时
ulimit -n 65535;systemd 服务加:LimitNOFILE=65535。同步提升 TCP 全连接队列:net.core.somaxconn(如 4096/65535),并确保 Redis 配置 tcp-backlog 不大于该值。
- OOM 防护
- 必要时降低 Redis 被 OOM Killer 选中的概率(仅作兜底):
echo -17 > /proc/${redis_pid}/oom_adj,更关键的是合理规划内存与持久化策略。
二 Redis 配置与数据结构优化
- 内存上限与淘汰
- 设置 maxmemory(如物理内存的 70%~80%),并选择匹配业务的 maxmemory-policy:热点数据优先 allkeys-lru,均匀访问可用 allkeys-random,带 TTL 的数据可用 volatile-ttl。
- 持久化策略取舍
- 仅缓存、可丢少量数据:可关闭持久化或降低 RDB 频率;高可靠:启用 AOF everysec;兼顾恢复速度与可靠性:启用 混合持久化 aof-use-rdb-preamble yes。RDB 典型
save 900 1 300 10 60 10000;AOF 常用 appendfsync everysec 并配置重写阈值。
- 避免阻塞与慢查询
- 严禁使用 **KEYS ***,改用 SCAN;大对象操作分批/分页(如 LRANGE start stop 替代
0 -1);删除大键用 UNLINK 异步释放;减少高成本命令如 SORT。
- 批处理与并发
- 客户端使用 Pipeline 合并请求,显著降低 RTT 与系统调用;Redis 6+ 可开启 IO 多线程分担网络读写:
io-threads 4、io-threads-do-reads yes(需压测找最优线程数)。
- 键与值设计
- 缩短键名、精简 value;对象序列化前压缩;合理选择 Hash/List/Set/ZSet 等结构,避免 big key(大 String 或超大集合)引发单次操作长阻塞与网络拥塞。
三 网络与高可用扩展
- 本机访问优先
- 同机服务可用 UNIX Socket 替代 TCP,降低协议栈开销:
unixsocket /var/run/redis.sock、unixsocketperm 700。
- 连接健康与队列
- 开启 tcp-keepalive 60,回收异常连接;高并发场景适当增大 tcp-backlog 与 somaxconn,避免握手队列溢出与连接超时。
- 读扩展与高可用
- 读多写少场景配置 replicaof 做读写分离;用 Redis Sentinel 做故障自动切换;容量/并发再上探时采用 Redis Cluster 分片横向扩展。
四 监控验证与容量规划
- 基线观测
- 关注 latency、instantaneous_ops_per_sec、used_memory、used_memory_rss、evicted_keys、blocked_clients、rejected_connections、aof_last_rewrite_time、rdb_last_bgsave_status 等关键指标,结合 slowlog 定位慢命令与 big key。
- 持久化与 fork 健康
- 监控 fork 耗时与失败告警;RDB/AOF 期间关注 aof_rewrite_in_progress、rdb_bgsave_in_progress 与磁盘 IO(如
iostat -x 1)是否成为瓶颈;必要时错峰触发、降低频率或迁移至更快存储(SSD/NVMe)。
- 渐进式调参与压测
- 任何内核与配置变更先在 预发/压测环境验证,采用分批次、可回滚策略;容量规划上为 RDB/AOF、复制、客户端连接、慢查询缓冲预留 20%~30% 内存余量,避免峰值期触发淘汰/阻塞/掉线。