在 CentOS 上 Redis 占用高(CPU、内存或连接数异常),通常不是 Redis 本身“bug”,而是配置或使用方式导致。下面按常见原因逐一说明,并给出排查与优化建议。
maxmemory 未限制默认 Redis 不限制内存,数据持续增长会吃满内存。
检查:
redis-cli config get maxmemory
解决:
maxmemory 2gb
maxmemory-policy allkeys-lru
大量 key 永久存在,内存只增不减。
检查:
redis-cli dbsize
redis-cli --bigkeys
建议:
EXPIREallkeys-lru 策略优化:
save 900 1
appendonly no # 如非强一致可关
如:
KEYS *检查:
redis-cli slowlog get 10
redis-cli --bigkeys
解决:
KEYSSCANRedis 是单线程,QPS 过高 CPU 直接打满。
现象:
解决:
常见于:
检查:
redis-cli info clients
解决:
maxclients 10000
timeout 300
内存满后启用 swap,Redis 极慢。
检查:
free -m
vmstat 1
解决:
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 关键配置我可以直接帮你定位到具体配置项。