本篇文章给大家分享的是有关Nginx中进程管理和重载的原理是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
进程结构图
Nginx是多进程结构,多进程结构设计是为了保证Nginx的高可用高可靠,包含:
- <李>
主进程:父进程,负责工人进程的管理
李> <李>工人进程:子进程,工人进程一般配置与服务器CPU核数相同,工人进程用来处理具体请求。
李> <李>缓存进程:也是子进程,包括缓存管理器和缓存加载程序进程,主要是反向代理做缓存使用。
李>注:多进程相对于多线程之所以能够保证高可用与高可靠是因为进程间地址空间是独立的,进程间的任务不会相互影响,相对多线程更加耗费CPU资源。而多线程共享一个进程的地址空间,其中一个线程任务失败会影响到其它线程任务。
<中心>图3 - 1 Nginx进程结构图中心>
假设我们的Nginx服务的用户是Nginx,我们可以使用如下命令查看当前运行的Nginx服务的主进程和工人进程,而且可以看到4个工人进程的父进程ID都是主人的进程ID (1325)。
[root@master ~] #, ps -ef |, grep nginx |, grep -v grep |, grep -v php-fpm root ,,,,,, 1325,,,,,, 1,, 0, 11:28 ?,,,,,,,, 00:00:00 nginx:, master process /usr/地方/nginx/sbin/nginx nginx ,,,,,, 1332,, 1325,, 0, 11:28 ?,,,,,,,, 00:00:00 nginx: worker 过程 nginx ,,,,,, 1334,, 1325,, 0, 11:28 ?,,,,,,,, 00:00:00 nginx: worker 过程 nginx ,,,,,, 1335,, 1325,, 0, 11:28 ?,,,,,,,, 00:00:00 nginx: worker 过程 nginx ,,,,,, 1336,, 1325,, 0, 11:28 ?,,,,,,,, 00:00:00 nginx:, worker 过程
<中心>图3 - 2一个主进程与四个工人子进程中心>
我们可以通过<代码> lsof我:nginx端口号> 代码来查看我们的主人和工人进程。
[root@master ~] #, lsof 我:80 COMMAND , PID , USER ,, FD ,, TYPE DEVICE 大?OFF NODE 名字 nginx ,, 1325,, root ,,, 6 u , IPv4 , 22282,,,,,, 0 t0 , TCP *: http (听) nginx ,, 1332, nginx ,,, 6 u , IPv4 , 22282,,,,,, 0 t0 , TCP *: http (听) nginx ,, 1334, nginx ,,, 6 u , IPv4 , 22282,,,,,, 0 t0 , TCP *: http (听) nginx ,, 1335, nginx ,,, 6 u , IPv4 , 22282,,,,,, 0 t0 , TCP *: http (听) nginx ,, 1336, nginx ,,, 6 u , IPv4 , 22282,,,,,, 0 t0 , TCP *: http (听)
信号量管理
<强> Linux的信号量管理机制强>
信号是进程间通信方式之一,典型用法是:终端用户输入中断命令,通过信号机制停止一个程序的运行。
我们可以通过给进程发送信号来管理我们的进程,<代码>杀- l 代码>命令可以查看Linux支持的信号量
<中心> Linux信号量中心>
一共有64号信号量,主要需要弄清如下几个:
杀死1 $ PID: (SIGHUP)重新加载进程,对于与终端脱离关系的守护进程,这个信号用于通知它重新读取配置文件;
杀2 $ PID: (SIGINT)中断(通Ctrl + C);
杀死3 $ PID: (SIGQUIT)从键盘输入的退出(Ctrl - \);
kill - 9 $ PID: (SIGKILL)立即杀死进程,无论当前程序处于什么状态;
杀死-10 $ PID: (SIGUSR1) USR1和USR2美元都是留给用户自定义的信号量;
杀死-12 $ PID: (IGUSR2美元)
杀死-15 $ PID: (SIGTERM)正常停止一个进程;
杀死-17 $ PID: (SIGCHLD)父子进程通信的信号量,父进程可以fork()出很多子进程,子进程挂掉会给父进程发送信号;
杀可将指定的信息送至程序。预设的信息为SIGTERM(15),可将指定程序终止。若仍无法终止该程序,可使用SIGKILL(9)信息尝试强制删除程序。程序或工作的编号可利用ps指令或就业指令查看。
kill -l #,查看所有能够支持的信号 kill PID #,杀死一个进程 kill 1024 #,杀死多个进程,进程号之间用空格隔开 kill 1024年,2048年 9 #,kill 表示立即强制结束进程 null null null null null null null null null null null null null null null null nullNginx中进程管理和重载的原理是什么