运行中的Nginx进程间的关系
来源:互联网 发布:创新创业网络课程答案 编辑:程序博客网 时间:2024/06/07 05:34
第2章 Nginx的配置
Nginx拥有大量官方发布的模块和第三方模块,这些已有的模块可以帮助我们实现Web服务器上很多的功能。使用这些模块时,仅仅需要增加、修改一些配置项即可。因此,本章的目的是熟悉Nginx的配置文件,包括配置文件的语法格式、运行所有Nginx服务必须具备的基础配置以及使用HTTP核心模块配置静态Web服务器的方法,最后还会介绍反向代理服务器。
通过本章的学习,读者可以:熟练地配置一个静态Web服务器;对影响Web服务器性能的各个配置项有深入的理解;对配置语法有全面的了解。通过互联网或其他途径得到任意模块的配置说明,然后可通过修改nginx.conf文件来使用这些模块的功能。
2.1 运行中的Nginx进程间的关系
在正式提供服务的产品环境下,部署Nginx时都是使用一个master进程来管理多个worker进程,一般情况下,worker进程的数量与服务器上的CPU核心数相等。每一个worker进程都是繁忙的,它们在真正地提供互联网服务,master进程则很“清闲”,只负责监控管理worker进程。worker进程之间通过共享内存、原子操作等一些进程间通信机制来实现负载均衡等功能(第9章将会介绍负载均衡机制,第14章将会介绍负载均衡锁的实现)。
部署后Nginx进程间的关系如图2-1所示。
Nginx是支持单进程(master进程)提供服务的,那么为什么产品环境下要按照master-worker方式配置同时启动多个进程呢?这样做的好处主要有以下两点:
由于master进程不会对用户请求提供服务,只用于管理真正提供服务的worker进程,所以master进程可以是唯一的,它仅专注于自己的纯管理工作,为管理员提供命令行服务,包括诸如启动服务、停止服务、重载配置文件、平滑升级程序等。master进程需要拥有较大的权限,例如,通常会利用root用户启动master进程。worker进程的权限要小于或等于master进程,这样master进程才可以完全地管理worker进程。当任意一个worker进程出现错误从而导致coredump时,master进程会立刻启动新的worker进程继续服务。
多个worker进程处理互联网请求不但可以提高服务的健壮性(一个worker进程出错后,其他worker进程仍然可以正常提供服务),最重要的是,这样可以充分利用现在常见的SMP多核架构,从而实现微观上真正的多核并发处理。因此,用一个进程(master进程)来处理互联网请求肯定是不合适的。另外,为什么要把worker进程数量设置得与CPU核心数量一致呢?这正是Nginx与Apache服务器的不同之处。在Apache上每个进程在一个时刻只处理一个请求,因此,如果希望Web服务器拥有并发处理的请求数更多,就要把Apache的进程或线程数设置得更多,通常会达到一台服务器拥有几百个工作进程,这样大量的进程间切换将带来无谓的系统资源消耗。而Nginx则不然,一个worker进程可以同时处理的请求数只受限于内存大小,而且在架构设计上,不同的worker进程之间处理并发请求时几乎没有同步锁的限制,worker进程通常不会进入睡眠状态,因此,当Nginx上的进程数与CPU核心数相等时(最好每一个worker进程都绑定特定的CPU核心),进程间切换的代价是最小的。
举例来说,如果产品中的服务器CPU核心数为8,那么就需要配置8个worker进程(见图2-2)。
如果对路径部分都使用默认配置,那么Nginx运行目录为/usr/local/nginx,其目录结构如下。
- |---sbin
- | |---nginx
- |---conf
- | |---koi-win
- | |---koi-utf
- | |---win-utf
- | |---mime.types
- | |---mime.types.default
- | |---fastcgi_params
- | |---fastcgi_params.default
- | |---fastcgi.conf
- | |---fastcgi.conf.default
- | |---uwsgi_params
- | |---uwsgi_params.default
- | |---scgi_params
- | |---scgi_params.default
- | |---nginx.conf
- | |---nginx.conf.default
- |---logs
- | |---error.log
- | |---access.log
- | |---nginx.pid
- |---html
- | |---50x.html
- | |---index.html
- |---client_body_temp
- |---proxy_temp
- |---fastcgi_temp
- |---uwsgi_temp
- |---scgi_temp
- 运行中的Nginx进程间的关系
- 运行中的Nginx进程间的关系
- Nginx 进程间的关系
- 进程间的关系
- nginx中的进程模型
- Nginx 工作进程运行示意图
- linux改变运行中的进程的uid
- linux进程间的关系
- linux 进程间的关系
- linux 进程间的关系
- Linux中的进程关系详解
- Android中的线程与进程之间的关系简单解释
- Nginx学习——Nginx进程间的通信
- Nginx学习——Nginx进程间的通信
- nginx的worker进程间通信
- Linux内核:轻量级进程间的关系
- 1.进程间的关系:终端,网络设备
- nginx 进程的类型
- Hello World
- Error:Execution failed for task :app:mergeDebugResources>Some file crunching failed的根本解决方法
- 大众点评支付渠道网关系统的实践之路
- PHP中句柄的通俗理解
- Java 类加载机制详解
- 运行中的Nginx进程间的关系
- android 截长图分享
- Linux监控工具之nmon安装
- PyQt4的安装
- 去哪儿网前端架构师司徒正美:如何挑选适合的前端框架?
- Textview 折行文字居中
- 58同城数据库架构最佳实践
- 九一八,勿忘国耻
- Android开发环境部署