温馨提示×

centos redis配置为何占用高

小樊
43
2026-09-11 18:51:07
栏目: 云计算

在 CentOS 上 Redis 占用高(CPU、内存或连接数异常),通常不是 Redis 本身“bug”,而是配置或使用方式导致。下面按常见原因逐一说明,并给出排查与优化建议。


一、内存占用高(最常见)

1. maxmemory 未限制

默认 Redis 不限制内存,数据持续增长会吃满内存。

检查:

redis-cli config get maxmemory

解决:

maxmemory 2gb
maxmemory-policy allkeys-lru

2. 键未设置过期时间

大量 key 永久存在,内存只增不减。

检查:

redis-cli dbsize
redis-cli --bigkeys

建议:

  • 缓存类数据必须 EXPIRE
  • 使用 allkeys-lru 策略

3. 持久化导致内存翻倍(RDB/AOF)

  • RDB fork 时内存副本
  • AOF rewrite 也会短暂占用

优化:

save 900 1
appendonly no   # 如非强一致可关

二、CPU 占用高

4. 慢查询 / 大 key

如:

  • KEYS *
  • 大 list / hash
  • 单次读取几 MB

检查:

redis-cli slowlog get 10
redis-cli --bigkeys

解决:

  • 禁止 KEYS
  • 拆分大 key
  • SCAN

5. 高频访问 + 单线程

Redis 是单线程,QPS 过高 CPU 直接打满。

现象:

  • CPU 100%
  • 吞吐上不去

解决:

  • 做分片(Redis Cluster)
  • 降低访问频率
  • 本地缓存兜底

三、连接数 / 文件描述符占用高

6. 连接未释放(连接泄漏)

常见于:

  • 短连接滥用
  • 客户端未 close

检查:

redis-cli info clients

解决:

maxclients 10000
timeout 300

四、CentOS 系统层原因

7. swap 导致“假高占用”

内存满后启用 swap,Redis 极慢。

检查:

free -m
vmstat 1

解决:

  • 加内存
  • 限制 maxmemory
  • 关 swap(谨慎)

8. 透明大页(THP)

CentOS 默认开启 THP,Redis 官方明确不建议。

关闭:

echo never > /sys/kernel/mm/transparent_hugepage/enabled

五、快速排查清单(建议你照做)

redis-cli info memory
redis-cli info cpu
redis-cli info clients
redis-cli slowlog get 10
redis-cli --bigkeys

六、典型“高占用”结论总结

现象 最可能原因
内存一直涨 无过期 / 无限 maxmemory
CPU 100% 大 key / 慢查询 / QPS 高
连接多 客户端泄漏
卡顿 swap / THP

如果你愿意,可以贴一下:

  • redis-cli info 输出
  • redis.conf 关键配置
  • 内存高还是 CPU 高

我可以直接帮你定位到具体配置项。

0