Nginx
在讲Nginx的进程管理之前,先来了解Nginx的进程结构。
Nginx的进程结构
运行已经配置好的Nginx,在Linux命令行中输入以下命令
ps -ef | grep nginx
找到nginx进程,查看所有关于它的进程详情,如图所示:
![](https://i-blog.csdnimg.cn/blog_migrate/bc0ecd6f74c31186a8c9cdf82e935be5.png)
从结果来看,可以看到,Nginx启动后,会有一个master进程以及一个worker进程。实际上,这个worker进程的数量是可修改的。
找到nginx.conf文件,如图所示:
![](https://i-blog.csdnimg.cn/blog_migrate/ec63bb025b1961503893908f477d9bdc.png)
可以看到在文件的头部有一个worker_processes,通过其后面的参数来指定有多少个worker进程。一般来说,这个值设为1就足够了。但是如果有存在SSL或者gzip这些比较消耗CPU的工作的时候,就设置为和CPU的核数一致即可,比如说两个4核CPU,worker_processes就可设为8,甚至可以设为16。
在这里将worker进程数改为2,重启nginx,再根据ps命令查看nginx进程,结果如下所示:
![](https://i-blog.csdnimg.cn/blog_migrate/9684e4f65ab78970bd9b0b6747b919a0.png)
从相关的进程信息来看,不难发现,Nginx是以一个多进程的方式来工作的。事实上,Nginx也存在单进程的方式,但单进程结构并不适用于生产环境,只适用于个人开发调试使用。
那么接下来来看一下多进程的Nginx中的进程模型,如图所示:
![](https://i-blog.csdnimg.cn/blog_migrate/10a983f3f24fb4dc2b33d6373267ff2e.jpeg)
从图中可知,Nginx在启动以后,会有一个父进程master和很多个子进程。而子进程又分为两类,一类为工作进程worker,一类为和Cache相关的进程。对于master进程来说,其主要是用于管理worker进程的。换句话说,则是监控每个worker进程的运行状态。对于请求的处理都是通过子进程worker处理,就算是使用的缓存也依旧是用worker进程来处理。
那么既然说到master进程的作用是管理worker进程,那么就得知道master进程是如何管理worker进程的,如图所示:
![](https://i-blog.csdnimg.cn/blog_migrate/983ee121f1274abddcbab1cae82d7b5d.jpeg)
从图中可知,进程间的通讯是通过信号来控制的。也就是说,我们可以直接通过给master进程发送信号来操作nginx。而nginx0.8版本以后,就引入了一系列的命令行参数来方便我们操作nginx。
在了解完Nginx的进程结构以后,我们再来了解Nginx的进程管理。
Nginx进程管理
方式1:信号
所谓的信号方式实际上是通过li