0

0

Redis怎样防范海量连接耗尽服务端资源

P粉602998670

P粉602998670

发布时间:2026-03-18 10:17:36

|

561人浏览过

|

来源于php中文网

原创

Redis连接数暴涨时,盲目调大maxclients会掩盖问题甚至引发OOM;真实瓶颈在系统级限制、连接池泄漏、僵尸连接及缺乏网络层防护。

redis怎样防范海量连接耗尽服务端资源

Redis连接数暴涨时,maxclients不是万能解药

直接调大maxclients只会掩盖问题,甚至加速崩溃。Redis默认maxclients是10000,但真实瓶颈往往在系统级:Linux的ulimit -n、TCP连接队列(tcp_max_syn_backlog)、内存(每个连接约1KB+开销)。盲目设成50000,可能触发OOM Killer杀掉Redis进程。

  • 先查真实上限:redis-cli info clients | grep connected_clients + cat /proc/$(pidof redis-server)/limits | grep "Max open files"
  • 服务端合理值建议:生产环境设为min(10000, 系统ulimit-20%) ,留余量给其他进程
  • 改完必须重启或用CONFIG SET maxclients N,但注意该命令不持久化,需同步写入redis.conf

客户端连接池泄漏比连接数多更致命

连接池max_connections=100,但代码里忘了close()或没进finally块,10个线程反复借连不还,几分钟就占满——此时connected_clients持续上涨,rejected_connections开始计数,错误日志里出现ERR max number of clients reached

  • Java Jedis务必用try-with-resources:try (Jedis jedis = pool.getResource()) { ... },自动close()
  • Python redis-py别手动调connection_pool.get_connection(),直接用redis.Redis(connection_pool=pool)实例,它内部会管理释放
  • 检查redis-cli info stats里的expired_keysevicted_keys突增——这往往是连接泄漏导致内存不足、触发淘汰的间接信号

timeout参数自动清理“睡死”的连接

客户端异常退出(如Pod被K8s强杀、网络闪断),连接不会自动关闭,Redis会一直维持这个socket,直到超时。默认timeout 0即永不超时,这些僵尸连接越积越多,最终挤占全部maxclients

Ai好记
Ai好记

强大的AI音视频转录与总结工具

下载
  • 线上必须启用:CONFIG SET timeout 60(单位秒),60~300之间按业务心跳周期定
  • 注意副作用:长轮询、慢查询场景下,60秒可能太短,会误杀正常连接;此时应改用应用层心跳+CLIENT IDLE TIME主动探测
  • 该配置对已存在的空闲连接立即生效,无需重启,但要确认你的Redis版本≥4.0(低版本不支持动态设置)

防火墙+IP限流才是第一道防线

DDoS或恶意扫描器打进来,根本不需要等它连上Redis——在内核层面就该拦截。靠Redis自身认证(requirepass)或rename-command只能防君子,防不住海量SYN包。

  • 云厂商安全组/iptables只放行可信IP段,例如:iptables -A INPUT -p tcp --dport 6379 -s 10.0.0.0/8 -j ACCEPT
  • 配合connlimit模块限制单IP并发:iptables -A INPUT -p tcp --dport 6379 -m connlimit --connlimit-above 10 -j REJECT
  • Redis本身不提供IP白名单,别信“bind 127.0.0.1就能防住”——Docker桥接或K8s Service可能绕过bind

真正难处理的是合法业务流量突增(比如秒杀),这时候光靠限连接数不够,得结合分布式限流(令牌桶+Lua原子脚本)和降级开关。但那是另一个问题了。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
什么是分布式
什么是分布式

分布式是一种计算和数据处理的方式,将计算任务或数据分散到多个计算机或节点中进行处理。本专题为大家提供分布式相关的文章、下载、课程内容,供大家免费下载体验。

433

2023.08.11

分布式和微服务的区别
分布式和微服务的区别

分布式和微服务的区别在定义和概念、设计思想、粒度和复杂性、服务边界和自治性、技术栈和部署方式等。本专题为大家提供分布式和微服务相关的文章、下载、课程内容,供大家免费下载体验。

252

2023.10.07

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

806

2023.08.10

点击input框没有光标怎么办
点击input框没有光标怎么办

点击input框没有光标的解决办法:1、确认输入框焦点;2、清除浏览器缓存;3、更新浏览器;4、使用JavaScript;5、检查硬件设备;6、检查输入框属性;7、调试JavaScript代码;8、检查页面其他元素;9、考虑浏览器兼容性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

198

2023.11.24

k8s和docker区别
k8s和docker区别

k8s和docker区别有抽象层次不同、管理范围不同、功能不同、应用程序生命周期管理不同、缩放能力不同、高可用性等等区别。本专题为大家提供k8s和docker区别相关的各种文章、以及下载和课程。

280

2023.07.24

docker进入容器的方法有哪些
docker进入容器的方法有哪些

docker进入容器的方法:1. Docker exec;2. Docker attach;3. Docker run --interactive --tty;4. Docker ps -a;5. 使用 Docker Compose。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

517

2024.04.08

docker容器无法访问外部网络怎么办
docker容器无法访问外部网络怎么办

docker 容器无法访问外部网络的原因和解决方法:配置 nat 端口映射以将容器端口映射到主机端口。根据主机兼容性选择正确的网络驱动(如 host 或 overlay)。允许容器端口通过主机的防火墙。配置容器的正确 dns 服务器。选择正确的容器网络模式。排除主机网络问题,如防火墙或连接问题。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

417

2024.04.08

docker镜像有什么用
docker镜像有什么用

docker 镜像是预构建的软件组件,用途广泛,包括:应用程序部署:简化部署,提高移植性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

454

2024.04.08

抖漫入口地址合集
抖漫入口地址合集

本专题整合了抖漫入口地址相关合集,阅读专题下面的文章了解更多详细地址。

17

2026.03.17

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号