高性能服务器—nginx(七)—nginx进程


文章目录

  • 高性能服务器---nginx(七)---nginx进程
  • 1.查看nginx进程
  • 2.指定worker进程的运行用户
  • 3.定义worker进程数
  • 4.绑定worker和CPU


1.查看nginx进程

当你启动nginx以后,使用ps命令查inginx进程,会发现nginx进程不只有一个。默认情况下,你会看到至少两个nginx进程

ps -ef | grep nginx
ps -ef | grep nginx|grep -v grep

nginx 查看容器 查看nginx进程_nginx 查看容器

2.指定worker进程的运行用户

编译安装nginx后,默认情况下worker进程是以nobody用户的身份运行的,如果我们想要指定worker进程的运行用户,则可以使用user指令

nginx 查看容器 查看nginx进程_nginx 查看容器_02

指定worker进程以nginx用户的身份运行:

建立nginx用户:

useradd -u 900 nginx
id nginx

修改配置文件:

vim /usr/local/nginx/conf/nginx.conf		#修改文件第一行
nginx -t	#语法检测
nginx -s reload	#在不暂停服务的情况下重新加载
ps -ef | grep nginx|grep -v grep

nginx 查看容器 查看nginx进程_nginx 查看容器_03


nginx 查看容器 查看nginx进程_配置文件_04

3.定义worker进程数

当我启动nginx以后,有两个nginx进程:一个master进程,一个worker进程。
这两个nginx进程都有各自的作用,见名知意,"worker"进程天生就是来"干活"的,真正负责处理请求的进程就是你看到的"worker"进程,那么"master"进程有什么用呢? "mlaster"进程其实是负责管理"worker"进程的,除了管理"worker"进程,master"进程还负责读取配通文件、判断配文件语法的工作。
"master进程"也叫"主进程",在nginx中, "master"进程只能有一个,而"worker"进程可以有多个,worker"进程的数量可以由管理员自己进行定义

  • 默认的nginx.conf配置文件中有这样一条配置worker_ processes 1;
  • 上述配置的意思就是启动nginx后只有1个worker进程,你想要多少个worker进程,将worker_processes指令的值设成多少就好了
  • worker_ processes指令只能在main区域中使用,通常情况下,worker_ processes的值通常不会大于服务器中cpu的核心数量。换句话说就是,worker进程的数量通常与服务器有多少cpu核心有关
    比如,nginx所在服务器拥有4核cpu,那么worker_ _processes的值通常不会大于4,这样做的原因是为了尽让每个worker进程都有一个cpu可以使用,尽量避免了多个worker进程抢占同一个cpu的情况,我们也可以将worker_ _processes的值设置为auto
  • worker_ processes的值为auto时,nginx 会自动检测当前主机的cpu核心数,并启动对应数量的worker进程。比如,nginx检测到当前主机一共有4个cpu核心,那么nginx就会启动4个worker进程

将服务器的CPU数设置为4:

nginx 查看容器 查看nginx进程_nginx 查看容器_05


修改配置文件:

vim /usr/local/nginx/conf/nginx.conf		#修改文件第二行
nginx -t	#语法检测
nginx -s reload	#在不暂停服务的情况下重新加载
ps -ef | grep nginx|grep -v grep

nginx 查看容器 查看nginx进程_nginx 查看容器_06


nginx 查看容器 查看nginx进程_nginx 查看容器_07

4.绑定worker和CPU

为了避免cpu在切换进程时产生性能损耗,我们也可以将worker进程与cpu核心进行"绑定",当worker进程与cpu核心绑定以后,worker进程可以更好的专注的使用某个cpu核心上的缓存,从而减少因为cpu切换不同worker进程而带来的缓存失效。
如果想要让worker进程与某个cpu核心绑定,则需要借助另外-一个配置指令worker_ cpu_ _affinity指令

想要搞明白怎样使用"worker_ cpu_ _affinity"指令, 最好先来了解一个概念
这个概念就是"cpu掩码",我们可以通过"cpu掩码"表示某个cpu核心
比如,当前机器上一共有4个cpu核心,那么我们就用4个0表示这4个核
也就是说,我们可以使用如下字符表示这4个核: 0000那么:
第一个核就用如下字符表示
0001
第二个核就用如下字符表示
0010
第三个核就用如下字符表示
0100
第四个和就用如下字符表示

规律就是,有几个核,就用几个0表示,如果想要使用某个核,就将对应位置的0改成1。从右边开始数。
比如:如果有8个核,我就可以使用如下字符表示这8个核中的第二个核:00000010