博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Nginx服务器中的Socket切分,需要的朋友可以参考下
阅读量:6956 次
发布时间:2019-06-27

本文共 1528 字,大约阅读时间需要 5 分钟。

  NGINX发布的1.9.1版本引入了一个新的特性:允许使用SO_REUSEPORT套接字选项,该选项在许多操作系统的新版本中是可用的,包括DragonFly BSD和Linux(内核版本3.9及以后)。该套接字选项允许多个套接字监听同一IP和端口的组合。内核能够在这些套接字中对传入的连接进行负载均衡。

  (对于NGINX Plus客户,此功能将在年底发布的版本7中出现)

  SO_REUSEPORT选项有许多潜在的实际应用。其他服务也可以使用它来简单实现执行中的滚动升级(Nginx已经通过不同的办法支持了滚动升级)。对于NGINX而言,启用该选项可以减少在某些场景下的锁竞争而改善性能。

  如下图描述,当SO_REUSEPORT选项有效时,一个单独的监听socket通知工作进程接入的连接,并且每个工作线程都试图获得连接(http://www.nanke0834.com)。

  当SO_REUSEPORT选项启用是,存在对每一个IP地址和端口绑定连接的多个socket监听器,每一个工作进程都可以分配一个。系统内核决定哪一个有效的socket监听器(通过隐式的方式,给哪一个工作进程)获得连接。这可以减少工作进程之间获得新连接时的封锁竞争(译者注:工作进程请求获得互斥资源加锁之间的竞争),同时在多核系统可以提高性能。然而,这也意味着当一个工作进程陷入阻塞操作时,阻塞影响的不仅是已经接受连接的工作进程,也同时让内核发送连接请求计划分配的工作进程因此变为阻塞。

  设置共享Socket

  为了让SO_REUSEPORT socket选项起作用,应为HTTP或TCP(流模式)通信选项内的listen项直接引入新近的reuseport参数,就像下例这样:

  复制代码 代码如下:

  http {

  server { listen 80 reuseport;

  server_name localhost;

  ...

  }

  }

  stream {

  server { listen 12345 reuseport;

  ...

  }

  }

  引用reuseport参数后,对引用的socket,accept_mutex参数将会无效,因为互斥量(mutex)对reuseport来说是多余的。对没有使用reuseport的端口,设置accept_mutex仍然是有价值的。

  reuseport的基准性能测试

  我在一个36核的AWS实例运行wrk基准测试工具测试4个NGINX 工作进程.为了减少网络的影响,客户端和NGINX都运行在本地,并且让NGINX返回OK字符串而不是一个文件。我比较三种NGINX配置:默认(等同于accept_mutex on ),accept_mutex off,和reuseport。如图所示,reuseport的每秒请求是其余的两到三倍,同时延迟和延迟标准差也是减少的。

  我又运行了另一个相关的性能测试——客户端和NGINX分别在不同的机器上且NGINX返回一个HTML文件。如下表所示,用 reuseport 减少的延迟和之前的性能测试相似,延迟的标准差减少的更为显著(接近十分之一)。其他结果(没有显示在表格中)同样令人振奋。使用 reuseport ,负载被均匀分离到了worker进程。在默认条件下(等同于 accept_mutex on),一些worker分到了较高百分比的负载,而用 accept_mutex off 所有worker都受到了较高的负载。

转载于:https://www.cnblogs.com/HanaKana/p/10757778.html

你可能感兴趣的文章
Spring MVC的视图解析器
查看>>
[09-07]点击按钮变跟页面展示内容
查看>>
Adreno GPU Profiler
查看>>
Eclipse搭建SpringBoot之HelloWorld
查看>>
作用域
查看>>
疯狂的ASP.NET系列-第一篇:啥是ASP.NET后续
查看>>
【.Net底层剖析】3.用IL来理解属性
查看>>
UVA - 1428 Ping pong
查看>>
P2495 [SDOI2011]消耗战
查看>>
P2633 Count on a tree
查看>>
重读<软件性能测试>摘要
查看>>
毕业季
查看>>
测评报告:热门项目管理工具哪家强?
查看>>
java.sql.SQLSyntaxErrorException: ORA-00904: " ": invalid identifier错误
查看>>
vue2.0做移动端开发用到的相关插件和经验总结
查看>>
Linux查看文件夹大小
查看>>
系统集成项目管理工程师整理资料
查看>>
writexml方法:
查看>>
AutoLayout经常用到的一些布局(含StackView)
查看>>
HLG 1541 集合划分【01背包】
查看>>