Nginx reuseport 连接重复问题

Nginx 端口复用 如图所示,当未启用SO_REUSEPORT选项时,单个侦听套接字将通知工作程序传入连接,每个工作程序都尝试建立连接。SO_REUSEPORT是Linux内核3.9在SOCKET中引入的新功能,它允许将多个AF_INET或AF_INET6套接字绑定到相同的套接字地址。以流量入口为例,入口服务为Nginx和Golang语言为主的程序来接收上游下发的流量。开启端口分片,这意味着将为每个工作进程创建一个单独的侦听套接字(使用SO_REUSEPORT socket选项),从而允许内核在工作进程之间分配传入的连接。 阅读详情

现象:

用ss -tnpl 'sport = :80' 命令,发现对于同一个IP+Port,一个进程内会有多个fd与之对应。

经过修改listen 指令的参数发现是reuseport导致的。

 

调试

1. Gdb 调试worker进程发现listening数组中的端口被复制了。

2. 搜索代码发现在ngx_event_module中,对reuseport的端口做了特殊处理,如果是reuseport的端口,那么就给每个worker进程都复制一份,在ngx_open_listening_sockets的时候,每个worker进程就都有了。

原因

具体原因见https://trac.nginx.org/nginx/changeset/7315/nginx。在这之前的版本

 

1. 如果worker_processes指令在listen ..reuseport之后被解析,那么这个连接就不会被克隆到worker进程中。

2. 这也简化了接下来的worker connections数目的检查,因为它也需要知道在clone之前的监听套接字个数。

基于这两点,就在event模块对reuseport的端口进行了clone。

Nginx多进程高并发、低时延、高可靠机制在滴滴缓存代理中的应用_nginx 并发设计 7.1 多进程、多线程机制选择多进程机制无锁操作,实现更容易多进程的代理,整个worker进程无任何锁操作,性能更好如果是多线程方式,如果代码出现bug段错误,则整个进程挂掉,整个服务不可用。而如果是多进程方式,因为bug触发某个worker进程段错误异常,其他工作进程不会受到如何影响,20个worker进程,如果触发异常,同一时刻只有有1/20的流量受到影响。而如果是多线程模式,则100%的流量会受到影响。 阅读详情

相关推荐

Simplicity Studio V5与EFR32BG22蓝牙开发环境实战指南

本文详细介绍了Simplicity Studio V5集成开发环境与EFR32BG22蓝牙芯片的开发实战指南。内容涵盖开发环境安装、SDK配置、项目创建、调试烧录、外设驱动集成及常见问题解决方案,帮助开发者快速上手物联网蓝牙应用开发,并充分利用EFR32BG22的低功耗与高集成度特性。

v5w6x的博客 320

TCP/IP编程之SO_REUSEADDR和SO_REUSEPORT套接字选项

基本概念: SO_REUSEADDR套接字选项能起到以下4个不同的功用: (1)SO_REUSEADDR允许启动一个监听服务器并捆绑众所周知端口,即使以前建立的该端口用作它们的本地端口的连接仍存在。 这个条件通常是这样碰到的: a)启动一个监听服务器; b)连接请求到的,派生一个子进程来处理这个客户; c)监听服务器终止,但子进程继续为现有的连接上的客户提供服务; d)重启监听服

daiyudong2020的博客 1万+

华为ITR流程实战指南:从设计到落地的全流程解析(附完整方案下载)

本文深度解析华为ITR流程从设计到落地的全流程实战指南。ITR不仅是高效处理客户问题的“救火”系统,更是驱动产品改进、预防问题的企业“免疫系统”。文章详细拆解了流程设计的四步走策略、三层技术支持体系的组织保障、以闭环改进为核心的考核激励,并探讨了如何借鉴其精髓,优化自身问题管理,实现从被动响应到主动服务的跨越。

y2z3a4b5c的博客 379

nginx源码分析—reuseport的使用

本文主要介绍nginx中reuseport的使用,文中代码较多,阅读本文需要读者对nginx的事件模块以及listen配置过程有了解。 由于nginx比较复杂,且作者对nginx的理解有限,文章难免存在疏忽之处,敬请指出! 一、reuseport的配置及解析 reuseport通过listen指令来配置,配置如下: listen 443 reuseport; listen指令由ngx_http_...

nice_wen的博客 1万+

如何区分Info与CoWoS封装?

这篇文章主要从Info、CoWoS封装的定义、Interposer的种类以及Info、CoWoS封装的种类三方面进行了介绍,希望读者能够有所收获

wangyubo1的博客 7938

【部署优化篇三】《DeepSeek边缘计算实战:把目标检测模型塞进树莓派,让AI在巴掌大的设备上“开天眼“》

谁说只有超级计算机才能跑AI?今天咱们就要在树莓派上玩转DeepSeek目标检测,让这个巴掌大的小盒子变成会‘看’世界的智能终端!本文手把手教你从零开始,把最潮的目标检测模型塞进树莓派。全程高能预警,建议准备好你的树莓派4B/5和散热风扇,咱们这就开启边缘计算的魔法之旅!

商务合作|问题讨论|交流学习 请联系作者微信,加微信请务必注明来意,博客主页有联系方式 1306

nginx启用reuseport

这两天做一个http测试,客户端使用一台8核16G的虚机,服务器使用8台8核16G的虚机,服务器挂在负载均衡后端。 客户端使用wrk打流 服务器开启nginx,返回 200 ok 测试结果发现服务器nginx的cpu利用率恨不均匀,后来查到有reuseport这个参数,放在listen后面 listen 80 default_server reuseport; 增了了试验了下,果然好用。 下图是对比,上面是不开启reuseport,可以看到cpu利用率在20-40%,而开启了,cpu利用率只

juewuer的博客 5036

【系统分析师】2009年真题:综合知识-答案及详解

在某银行业务的用例模型中,“取款”用例需要等到“存款”用例执行之后才能执行,两个用例之间的关系属于(1);“取款”和“存款”两个用例中都需 要执行查询余额的功能,将查询余额提取成独立的用例,那么“取款”和“存款” 用例与“查询余额”用例之间的关系属于(2)。(1)A. 关联关系 B. 扩展关系 C. 使用关系 D. 依赖关系 (2)A. 扩展关系 B. 使用关系 C. 依赖关系 D. 继承关系【参考答案】D、A雇员类含有计算报酬的行为,利用面向对象的(3),可以使得其派生类专职 雇员类和兼职雇员类计算报酬的

数据知道的博客 1万+

Nginx reuseport导致偶发性卡顿

从2018年开始,我们有个业务陆续接到反馈 Nginx 线上集群经常出现不响应或者偶发性的“超慢”请求。这种卡顿每天都有少量出现。而只有多个集群中的一个出现,其他压力更大的集群皆未出现。业务结构比较简单:LVS->Nginx->后端,如图所示:并且已知,卡顿的原因是打开 reuseport 后,新进来的请求可以由内核 hash 派发给一个 Nginx woker ,避免了锁争抢以及惊群。

1424

【用unity实现100个游戏之10】复刻经典俄罗斯方块游戏(附项目源码)

当今游戏产业中,经典游戏的复刻一直是一项受欢迎且具有挑战性的任务。俄罗斯方块是一个深入人心、令人上瘾的经典游戏,在过去几十年里一直享有广泛的流行度。其简单而富有策略性的玩法吸引了无数玩家的关注。因此,我决定利用Unity引擎来复刻这款经典游戏,以让更多的人重新体验其中的乐趣。通过使用Unity引擎,我能够利用其强大的工具和功能,从头开始构建一个与原版俄罗斯方块游戏相似的游戏。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 2796

不会路由器叠加多条宽带?看这个就够了,能让你的局域网速度更快!

通常我们在企业网络或实际项目中,随着用户的增加,一条或者几条带宽不能满足正常使用,便可以对带宽进行叠加,便于网络带度更快;通常家里有可能有两条带宽的,联通或移动的,可能都是充话费送的,但网速都不怎么样,不用可惜,用之委屈,那怎么办呢?如在迅雷上开启下载,多个资源同时下载,此时总带宽可以达到120M,也就是WAN口带宽可以叠加。多wan口路由器, 一般是有2个wan口,分别为wan1与wan2。当然也有更多的wan口的。[1] 对整个局域网来说,出口带宽数量多了,相当于总带宽上升,这样是可以起到叠加效果。

qq_43416206的博客 1112

使用certbot工具制作https证书

进入certbot官网,根据自己使用的服务器和操作系统进行选择。 安装 此部分按照官方教程操作即可,但是在centos7中使用yum安装的时候会出现提示找不到需要安装的包,这时需要安装EPEL软件源,因为certbot包包含在EPEL软件源中, 代码如下:sudo yum install epel-release 安装完EPEL软件源按照官方教程继续即可 配置nginxserver { listen 443 ssl; server_name chenke.online; ....

gairuichan的博客 573

YOLOv8工业缺陷检测实战:攻克光照不均难题,精度从70%到92%的全流程优化(附缺陷数据集)

YOLOv8在工业缺陷检测中突破光照不均难题,核心是“硬件控光+数据造景+模型聚焦+训练攻坚硬件控光:从源头减少光照变异,降低算法难度;数据造景:用CLAHE、合成样本让模型“见过足够多的光照情况”;模型聚焦:用ECA注意力和Focal-EIoU损失,让模型盯住缺陷而非光照;训练攻坚:分阶段+难例挖掘,强迫模型学习薄弱点。这套方案已在汽车轴承、手机外壳、PCB板3类产线落地,平均精度提升20%+,漏检率控制在0.08%以内,完全满足工业级要求。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1195

同一个端口能不能被两个程序同时监听?

回到开头那个问题,现在可以完整地回答了。默认情况下,同一个地址加端口的组合只能被一个程序绑定监听,重复绑定报 "端口被占用"。开了之后,多个进程可以同时监听同一个端口,内核会对入站连接做哈希分发,这种做法常见于多进程的高性能服务。和是两回事,一个管重启快,一个管多进程共享监听。说到底,判断监听是否冲突,本质就是看绑定的地址加端口组合,再加上有没有设置复用标志。

m0_46995061的博客 191

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Linux之SO_REUSEPORT属性笔记

以上就是SO_REUSEPORT属性的特点,实际使用中利用该属性结合其他相关的多路io高效机制特殊性,在实际使用中结合实际业务场景,从而实现高性能高可用的服务。

qq_26105397的博客 856

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

打破端口独占迷思:SO_REUSEPORT实现多进程监听同一端口

在网络编程中,端口监听是基础概念,通常认为一个端口只能被一个进程独占。然而,通过操作系统内核提供的套接字选项,可以实现更灵活的端口绑定策略。SO_REUSEADDR和SO_REUSEPORT是两个关键机制,前者主要用于解决TIME_WAIT状态导致的端口重用问题,后者则真正实现了多进程对同一端口的并发监听与内核级负载均衡。这些技术在高性能服务器架构中具有重要价值,能够显著提升并发处理能力。在Java网络编程中,通过ServerSocketChannel设置SO_REUSEPORT选项,可以启动多个进程同时监

weixin_30776545的博客 361

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Java端口监听技术演进:从独占限制到SO_REUSEPORT复用

端口监听是网络编程中的基础概念,指进程在特定网络端口等待连接请求的技术机制。其底层原理基于操作系统的套接字绑定机制,传统上遵循端口独占性原则以避免数据包路由冲突。随着SO_REUSEPORT等套接字选项的出现,这一限制被突破,实现了真正的端口复用和内核级负载均衡。在Java网络编程中,通过设置SO_REUSEADDR和SO_REUSEPORT选项,结合Netty等高性能框架,可以构建高可用的微服务架构。这种技术特别适用于零停机部署、负载均衡优化等场景,成为现代分布式系统的重要基础。本文以Java面试中的经典

weixin_30571465的博客 482

nginx转发post数据丢失_高性能 -Nginx 多进程高并发问题

关于作者 前滴滴出行技术专家,现任OPPO文档数据库mongodb负责人,负责oppo千万级峰值TPS/十万亿级数据量文档数据库mongodb内核研发及运维工作,一直专注于分布式缓存、高性能服务端、数据库、中间件等相关研发。后续持续分享《MongoDB内核源码设计、性能优化、最佳运维实践》,Github账号地址:https://github.com/y123456yz1. 开发背景 ...

weixin_39615991的博客 1044

深入解析端口独占原理:从操作系统到K8s与Nginx的实践

端口是网络通信中的基础概念,用于标识主机上的应用程序端点。其核心原理在于,在同一个网络命名空间内,特定的传输层协议、IP地址和端口组合只能被一个进程监听,这是由操作系统内核协议栈保证的,旨在避免数据包路由冲突。这一机制在传统单机部署中至关重要,但在现代分布式架构下,其价值通过虚拟化技术得以延伸。利用网络命名空间隔离,如Docker容器和Kubernetes Pod,可以在不同隔离环境中实现相同端口的并行监听,这是微服务架构得以灵活扩展的基础。同时,反向代理(如Nginx)通过单一监听点结合应用层路由,实现了

weixin_33796177的博客 404

Nginx核心结构体ngx_http_conf_addr_t解析与应用

在Web服务器开发中,Nginx以其高性能和模块化架构著称。其核心机制通过数据结构如ngx_http_conf_addr_t实现地址配置管理,该结构体定义了监听地址、协议选项等关键参数。理解其原理有助于优化服务器配置,特别是在处理HTTP/2、SSL/TLS等现代协议时。ngx_http_conf_addr_t通过哈希表实现快速虚拟主机匹配,支持reuseport等内核级优化技术,适用于高并发场景。开发人员可通过扩展该结构实现动态SSL证书加载等高级功能,是Nginx模块开发和性能调优的重要切入点。

weixin_33946020的博客 510

端口独占真相:从SO_REUSEADDR到K8s网络,多进程监听同一端口的原理与实践

在TCP/IP网络编程中,端口绑定与监听是构建网络服务的基础。传统认知认为一个端口只能被一个进程独占,这源于操作系统内核bind()系统调用的默认行为,旨在防止数据包错误递送。然而,通过设置套接字选项,这一规则可以被合理打破。SO_REUSEADDR选项主要解决TIME_WAIT状态导致的端口无法立即重用问题,提升服务可重启性;而SO_REUSEPORT选项则允许多个活跃套接字绑定相同地址,由内核实现连接级负载均衡,显著提升并发处理能力。这些机制在高性能服务器架构和云原生环境中具有重要技术价值。例如,Ngi

weixin_33978044的博客 976

Socket、异步非阻塞 I/O 与 NGINX、Netty 模型

本文以 TCP 服务端和 Linux 为主要背景,串联监听 socket、连接 socket、I/O 多路复用,以及 NGINX 和 Netty 如何接受和处理连接。不同操作系统、传输实现和框架版本的细节可能有所不同。

zcx的博客 363

端口独占与共享:从Linux内核到K8s的深度解析

在网络编程中,端口是网络通信的端点,其核心原理由操作系统内核的socket和bind系统调用管理。默认情况下,一个IP:Port组合在同一网络命名空间内只能被一个进程绑定监听,这是TCP/IP协议栈的基石。然而,通过套接字选项SO_REUSEPORT,可以实现多进程对同一端口的负载均衡监听,这是高性能服务器(如Nginx)的关键优化技术。在云原生和微服务架构下,这一基础概念被容器网络命名空间、K8s Service的iptables/IPVS转发规则等抽象层所扩展。理解端口在容器隔离、K8s NodePor

weixin_33811539的博客 427
上一篇: Nginx源码分析之变量
下一篇: Nginx resolver 解析proxy_pass中的域名
Leopard_89
博客等级 码龄15年 4粉丝 16原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值