随笔 - 1162  文章 - 0  评论 - 16  阅读 - 59万 

一、Nginx 原理

  1、master 和 worker

    查看 Nginx 相关的进程:

    

  2、工作模式

    

 

  3、worker 是如何进行工作的

      

 

  4、master-workers 的机制的好处

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

    小结

    (1)可以使用 nginx -s reload  热部署,利用 nginx 进行热部署操作;

    (2)每个 worker 是独立的进程,如果有其中一个 worker 出现问题,其他 worker 独立的,继续进行争抢,实现请求过程,不会造成服务中断;

  5、设置多少个 worker 合适

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

    work 数和服务器的 CPU 数相等是最为适宜的。

    设置 worker 数量:

复制代码
worker_processes 4
#work 绑定 cpu(4 work 绑定 4cpu)。
worker_cpu_affinity 0001 0010 0100 1000


#work 绑定 cpu (4 work 绑定 8cpu 中的 4 个) 。
worker_cpu_affinity 0000001 00000010 00000100 00001000
复制代码

 

  6、连接数 worker_connection

    这个值是表示每个 worker 进程所能建立连接的最大值,所以,一个 nginx 能建立的最大连接数,应该是 worker_connections * worker_processes。当然,这里说的是最大连接数,对于HTTP 请 求 本 地 资 源 来 说 , 能 够 支 持 的 最 大 并 发 数 量 是 worker_connections *worker_processes,如果是支持 http1.1 的浏览器每次访问要占两个连接,所以普通的静态访问最大并发数是: worker_connections * worker_processes /2,而如果是 HTTP 作 为反向代理来说,最大并发数量应该是 worker_connections *worker_processes/4。因为作为反向代理服务器,每个并发会建立与客户端的连接和与后端服
务的连接,会占用两个连接。

    

 

   (1)第一个:发送请求,占用了 worker 的几个连接数?

     答:2个或者4个。

      

 

   (2)第二个:nginx 有一个 master,有四个 worker,每个 worker 支持最大的连接数 1024,支持的最大并发数是多少?

    如果是普通的静态访问最大并发数是:worker_connections * worker_processes/2;

    如果是HTTP作为反向代理来说,最大并发数量应该是:worker_connections * worker_processes/4;

 

posted on   格物致知_Tony  阅读(302)  评论(0编辑  收藏  举报
编辑推荐:
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 没有源码,如何修改代码逻辑?
· NetPad:一个.NET开源、跨平台的C#编辑器
· 面试官:你是如何进行SQL调优的?
历史上的今天:
2019-08-25 JavaScript 属性操作
2019-08-25 JavaScript 事件(基础)
2019-08-25 JavaScript 获取页面元素
2019-08-25 JavaScript API 与 DOM
点击右上角即可分享
微信分享提示

目录导航