运行中nginx进程间的关系

在正式提供产品的环境下,部署nginx都是使用master进程来管理多个worker进程.

一般情况下,worker进程都与服务器上的核数相等,每一个worker进程都是繁忙的,它们真正的提供互联网服务.

而master进程则很清闲,只负责监控管理worker进程.

worker进程之间通过共享内存,原子操作等一系列进程之间的通讯来实现负载均衡

共享内存( shared memory ) :共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号两,配合使用,来实现进程间的同步和通信。

部署后nginx进程之间的关系,如下图所示:

那么为什么要按照master-worker方式配置多个进程:有两点

1.master进程可以是唯一的,只专注于管理真正提供服务的worker进程

2.多个worker进程提高了服务的健壮性,还充分利用现有的smp架构(堆成多处理架构),从而实现真正的多核并发处理

那么为什么worker进程设计的与cpu核数一致吶,先要看看apache与nginx有什么不同之处:

apache一个进程处理一个请求,在大并发量的情况下,只能加大进程或者线程数,通常一台服务器几百个进程,大量进程切换带来无谓的系统资源消耗

nginx一个worker进程可处理的请求数只限制在内存的大小,不同的worker进程处理并发请求没有同步锁限制,worker进程不会睡眠,故设置worker进程与cpu核数一致,进程间切换代价是最小的.(即cpu是8核,worker进程设置为8个.)(补充知识:进程与CPU调度的关系,单个核心处理多个进程的时候,是排队处理的,所以将Worker进程数量设置超过核心数是没有太大意义的,会导致进程间切换额外开销)

时间: 2024-10-15 02:13:29

运行中nginx进程间的关系的相关文章

Nginx学习——Nginx进程间的通信

nginx进程间的通信 进程间消息传递 共享内存 共享内存还是Linux下提供的最主要的进程间通信方式,它通过mmap和shmget系统调用在内存中创建了一块连续的线性地址空间,而通过munmap或者shmdt系统调用可以释放这块内存.使用共享内存的优点是当多个进程使用同一块共享内存时,在不论什么一个进程改动了共享内存中的内容后,其它进程通过訪问这段共享内存都可以得到改动后的内容. Nginx定义了ngx_shm_t结构体.用于描写叙述一块共享内存, typedef struct{ //指向共享

Linux命令之pstree - 以树状图显示进程间的关系

本文链接:http://codingstandards.iteye.com/blog/842156   (转载请注明出处) 用途说明 pstree命令以树状图显示进程间的关系(display a tree of processes).ps命令可以显示当前正在运行的那些进程的信息,但是对于它们之间的关系却显示得不够清晰.在Linux系统中,系统调用fork可以创建子进程,通过子shell也可以创建子进程,Linux系统中进程之间的关系天生就是一棵树,树的根就是进程PID为1的init进程. 常用参

[Linux] Linux命令之pstree - 以树状图显示进程间的关系

转载自: http://codingstandards.iteye.com/blog/842156 pstree命令以树状图显示进程间的关系(display a tree of processes).ps命令可以显示当前正在运行的那些进程的信息,但是对于它们之间的关系却显示得不够清晰.在Linux系统中,系统调用fork可以创建子进程,通过子shell也可以创建子进程,Linux系统中进程之间的关系天生就是一棵树,树的根就是进程PID为1的init进程. 常用参数 格式:pstree 以树状图显

进程间的关系

进程组 进程组是一个或多个进程的集合.每个进程除了有一个进程ID之外,还属于一个进程组.每个进程组有一个唯一的进程组ID.每一个进程组都可以有一个组长进程.(一般来说,第一个进程为组长进程)组长进程的标识是,其进程组ID等于其进程的ID. 只要某个进程中一个进程还存在,则进程组就存在,与其组长进程是否终止无关. 作业 Shell分前后台控制的不是进程而是作业或者进程组.在命令行上运行一个二进制程序,则是开启了一个作业.一个前台作业可以由多个进程组成,一个后台作业也可以由很多进程组成. 作业控制:

windows cmd下如何暂停(挂起)运行中的进程

在Linux下做开发时,我们都熟知Ctrl+Z的指令,作用就是把当前运行的程序转到后台,暂停执行,等到合适的时候再使用fg指令把这个程序调出来再次执行.这功能也不常用,但有时候还挺必要. 那么windows下如果需要这样的话该怎样做呢?我对windows不太熟,没有找到现成的可以使用的方法.我猜想windows本身不提供这个功能,要不然微软公司不会额外提供一套这样的工具. https://technet.microsoft.com/en-us/sysinternals/bb897540.aspx

shell编程概念介绍及变量定义--关于脚本运行与shell进程之间的关系

shell是用户与内核进行交互操作的一种接口,目前最流行的shell称为bash shell shell也是一门编程语言<解释型的编程语言>,即shell脚本<就是用 linux 的 shell 命令编程> 一个系统可以存在多个shell,可以通过 cat/etc/shells 命令查看系统中安装的shell,不同的shell 可能支持的命令语法是不相同的 基本格式 代码写在普通文本文件中,通常以 .sh为后缀名 例vi hello.sh: #!/bin/bash      ##表

Linux显示所有运行中的进程

[email protected]:~$ ps aux | less USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.1 33788 3172 ? Ss 23:00 0:01 /sbin/init root 2 0.0 0.0 0 0 ? S 23:00 0:00 [kthreadd] root 3 0.0 0.0 0 0 ? S 23:00 0:00 [ksoftirqd/0] root 4 0.0 0.0

使用 gdb 调试运行中的 Python 进程

本文和大家分享的是使用 gdb 调试运行中的 Python 进程相关内容,一起来看看吧,希望对大家学习python有所帮助. 准备工作 安装 gdb 和 python2.7-dbg: $ sudo apt-get install gdb python2.7-dbg 设置 /proc/sys/kernel/yama/ptrace_scope: $ sudo su# echo 0 > /proc/sys/kernel/yama/ptrace_scope 运行 test.py: $ python te

linux中关于进程那些事

进程(Process)是系统进行资源分配和调度的基本单位,一个进程是一个程序的运行实例.而在Linux中,可以使用一个进程来创建另外一个进程.进程和程序是有本质区别的:进程是一个程序的一次执行过程,同时也是资源分配的最小单元.程序是静态的,它是一些保存在磁盘上的指令的有序集合,没有任何执行的概念:而进程是一个动态的概念,它是程序执行的过程,包括了动态创建.调度和消亡的整个过程.Linux操作系统包括三种不同类型的用户进程,每种类型的进程都有自己的特点和属性.(1) 交互进程--由shell启动的