• 主页

  • 投资

  • IT

    🔥
  • 设计

  • 销售

关闭

返回栏目

关闭

返回服务器栏目

124 - Nginx高级 - 原理 - master信号 - worker争抢

作者:

贺及楼

成为作者

更新日期:2024-05-23 16:09:22

master worker

  1. ps -ef | grep nginx
  1. |
  2. master进程
  3. | | |
  4. 有信号 有信号 有信号
  5. | | |
  6. worker进程 worker进程 worker进程——————>回master进程争抢
  7. | | | | | |
  8. 连接 连接 连接 连接 连接 连接
  9. | | | | | |
  10. tomcat tomcat tomcat tomcat tomcat tomcat
  11. | | | | | |
  12. Client Client Client Client Client Client

master-workers的机制的好处

每个worker进程是独立的进程,不需要加锁,省掉锁带来的开销
同时在编程以及问题查找时,也会方便很多。
独立的进程,让互相之间不会影响,一个进程退出后,其它进程还在工作服务不会中断,master进程则很快启动新的worker 进程
worker进程的异常退出,肯定是程序有bug了
异常退出,会导致当前worker上的所有请求失败,不过不会影响到所有请求,所以降低了风险。

设置多少worker

与Redis相似,io多路复用(win不能最大化)
每个worker都是独立一个进程
一个进程里只有一个主线程,通过异步非阻塞的方式来处理请求
即使是千上万个请求也不在话下
每个worker的线程可以把一个cpu的性能发挥到极致。
所以worker数和服务器的cpu数相等是最为适宜的。
设少了会浪费gu,设多了会造成cpu频繁切换上下文带来的损耗。

设置worker数量。
worker processes 4
work绑定cpu(4work绑定4cpu)。
worker. cpu affinity 0001 0010 0100 1000

连接数worker_connection

  • 每个worker进程能建立的最大连接数,应该是
    worker_connections * worker_processes

    1. 4 * 1024 = 4096

    1024我猜的是1个线程最小占1m

  • 支持http1.1的浏览器每次访问要占两个连接,所以普通的静态访问最大并发数是:

    1. worker connections * worker processes /2

    client抢到手worker - 1次
    worker返回client - 1次

  • HTTP作为反向代理来说,最大并发数量应该是

    1. worker connections * worker_processes/4

    因为作为反向代理服务器,每个并发会建立与客户端的连接和与后端服务的连接,会占用两个连接。
    client抢到手worker - 1次
    worker转tomcat - 1次
    tomcat返回worker - 1次
    worker返回client - 1次