nginx是一个多进程/多线程高性能web服务器,在linux系统中,nginx启动后会以后台守护进程(daemon)的方式去运行,后台进程包含一个master进程和多个worker进程(这个数量可以在nginx.conf配置文件中worker_processes这个参数设置),可以充分利用多核架构。nginx工作模式是以多进程的方式来工作的,当然nginx也是支持多线程的方式的,只是我们主流的方式还是多进程的方式,也是nginx的默认方式。nginx在启动之后会有一个master进程和多个worker进程(默认是一个),多个worker子进程将监听同一个端口,并行处理请求。
master主进程主要用来管理worker进程,主要作用是:读取并验正配置信息,管理真正提供服务的worker进程,向各worker进程发送信号,监控worker进程的运行状态,当worker进程退出后(异常情况下),会自动重新启动新的worker进程。master进程不会对用户请求提供服务,而用户的请求则是worker进程来响应的。
nginx是通过信号来控制,比如关闭,重启等去控制nginx进程。nginx信号是属于nginx进程间的通信的一种机制,比如master主进程控制多个worker子进程,也是通过信号控制的,如下图。
worker 进程数应该设置为等于 CPU 的核数,高流量并发场合也可以考虑将进程数提高至 CPU 核数 * 2。
[root@localhost oa_workflow_test]# ps aux | grep nginx root 2381 0.0 0.0 47688 1464 ? Ss 6月01 0:00 nginx: master process /usr/local/nginx/sbin/nginx www 2383 0.0 0.1 50216 2304 ? S 6月01 0:00 nginx: worker process nginx 2624 0.0 0.3 775948 6800 ? S 6月01 0:00 php-fpm: pool www nginx 2625 0.0 0.3 775948 6800 ? S 6月01 0:00 php-fpm: pool www root 69028 0.0 0.0 114704 976 pts/1 R+ 12:24 0:00 grep --color=auto nginx [root@localhost oa_workflow_test]# /usr/local/nginx/sbin/nginx -s reload [root@localhost oa_workflow_test]# ps aux | grep nginx root 2381 0.0 0.1 48220 2728 ? Ss 6月01 0:04 nginx: master process /usr/local/nginx/sbin/nginx www 2383 0.0 0.1 50216 2304 ? R 6月01 0:02 nginx: worker process is shutting down nginx 2624 0.0 0.3 775948 6800 ? S 6月01 0:00 php-fpm: pool www nginx 2625 0.0 0.3 775948 6800 ? S 6月01 0:00 php-fpm: pool www www 69034 36.0 0.0 0 0 ? R 12:24 0:01 [nginx] www 69035 60.6 0.1 50548 2392 ? R 12:24 0:01 nginx: master process /usr/local/nginx/sbin/nginx www 69036 34.0 0.1 50548 2560 ? S 12:24 0:01 nginx: worker process www 69037 67.6 0.1 50548 2560 ? S 12:24 0:02 nginx: worker process www 69038 36.3 0.1 50548 2260 ? R 12:24 0:01 nginx: master process /usr/local/nginx/sbin/nginx root 69040 49.0 0.0 114708 980 pts/1 S+ 12:24 0:00 grep --color=auto nginx
Nginx支持以下几种信号选项:
- TERM,INT: 快速关闭
- QUIT :从容关闭(优雅的关闭进程,即等请求结束后再关闭)
- HUP :平滑重启,重新加载配置文件 (平滑重启,修改配置文件之后不用重启服务器。直接kill -PUT 进程号即可)
- USR1 :重新读取日志文件,在切割日志时用途较大(停止写入老日志文件,打开新日志文件,之所以这样是因为老日志文件就算修改的文件名,由于inode的原因,nginx还会一直往老的日志文件写入数据)
- USR2 :平滑升级可执行程序 ,nginx升级时候用
- WINCH :从容关闭工作进程
Nginx信号控制语法:
kill -信号选项 nginx的主进程号
例如:从容关闭nginx服务
kill -QUIT nginx主进程号