一:nginx的整体结构
- master进程和worker进程概览(父子关系),启动nginx,看到了一个master进程,一个worker进程
这里的root 和nobody表示进程所属的用户id,而拥有root权限的进程是linux中具有最高权限的进程, nobody同样也是属于系统用户,但是他的权限会比较低,那么worker进程的权限也会比较低,这样的好处是:假设被黑客攻击,或者利用了,但是权限很低,也无法对系统产生大的伤害
- 第一列:UID,进程所属的用户id
- 第二列:进程ID(PID),用来唯一的标识一个进程
- 第三列:父进程ID(PPID)。
结论:
通过观察master和worker的进程pid就能发现他们是存在父子关系的, 而worker进程是被master进程通过fork()创建出来的, 既worker进程是master进程的子进程,master是父进程
nginx进程模型
-
1、一1个master进程,一到多个worker进程 这种工作机制来对外服务的,这种工作机制保证了 nginx能够
稳定
、灵活
的运行。 -
2、master进程责任:监控进程,不处理具体业务,专门用来管理和监控worker进程,master,角色是监工,比较清闲。
-
worker进程:用来干主要的活的,(和用户交互)。
-
master进程和worker进程之间要通讯,
可以用 信号 ,也可以用 共享内存
。 -
稳定性,灵活性,体现之一:worker进程 一旦挂掉,那么master进程会立即fork()一个新的worker进程投入工作中去。
调整worker进程数量
worker进程几个合适呢?公认的做法: 多核计算机,就让每个worker运行在一个单独的内核上,最大限度减少CPU进程切换成本,提高系统运行效率
,物理机:4核(4个processors);
博主这里的机器是16核
工作站
工作站:2个物理cpu ,蓝色的一个cpu,红色的一个cpu
每个物理cpu里边内核数量,是4个;core1 ~ core4
每个core里边有两个逻辑处理器(超线程技术/siblings)
所以总共有16个processors(最细小的单位,也就是平时大家说的处理器个数)
我们的worker进程内核数量也并不是没有设计的,一般都调整在与最大核数相同的数量,博主这里使用的是服务器先天限制了cpu是1核的就不能再更改nginx的worker数了,如果同学们使用的是宿主机是自己的电脑的话可以直接上手配置。该配置文件存在 nginx-1.14.2/conf/nginx.conf
目录下,如果条件允许建议将他改成4,这样表示的是设置nginx的worker进程数量为4。
二:nginx进程模型细说
nginx的可用选项
-
nginx重载配置文件 :在不中断nginx服务器修改完配置文件,让配置文件生效 ,指令:
sudo ./nginx -s reload
-
nginx热升级,热回滚:在不停止web服务器对用户提供服务的前提下进行对nginx版本的升级这就叫做热升级,
这里的热回滚的意思是即使是升级到了最新版本还是可以回滚到旧的版本
(出于新版本不稳定的情况下) -
nginx的关闭
./nginx -s quit
站在多进程,多线程的角度思考nginx的有点:
- 多线程模型的弊端:共享内存,如果某个线程报错一定会影响到其他线程,最终会导致整个服务器程序崩溃。
- nginx是以多进程的方式运行整个web服务器,会由master创建子进程worker,最终由master父进程去管理worker子进程的方式运作,即使是单个worker进程被杀掉了也并不影响其他的worker进程,并且master进程也会立马fork出一个新的进程