进程模型--nginx
2013-04-27 12:38
316 查看
1、初始化
ssl
数据结构
时间,log,crc表,
系统检测,设置handler和获取系统信息(如cpu,rlimit),random初始化
如果是新bin的子进程,接管父进程的socket等信息
pid file
信号量处理
忽略
SIGSYS
SIGPIPE
SIGIO
退出
SIGQUIT
结束
SIGINT
SIGTERM
刷新配置
SIGHUP
重新打开日志
SIGUSR1
结束Accept
SIGWINCH
升级nginx/退出重新启动
SIGXCPU
定时器
SIGALRM //用于退出,如果超过1秒不退出,就对子进程发KILL信号,否则发TERM
重启子进程
SIGCHLD ///////忽略SIGCHLD信号,常作为提高并发服务器性能的一个技巧。因为并发服务器可能fork很多子进程,子进程终结后需要服务器进程wait子进程并清理资源。如果将该信号忽略,可使内核把僵尸子进程交给init进程处理,节省大量僵尸子进程占用的系统资源。
2、Master处理
初始化信号量
启动工作进程
启动缓存管理进程
进入主循环等待信号,对信号量的进行调用相应的控制动作
3. 子进程处理
初始化
读配置
sertrlimit
切换用户
设置CPU亲缘性
模块初始化
通知通道初始化
父对子进程的命令控制通过socketpair(AF_UNIX, SOCK_STREAM, 0, ngx_processes[s].channel)的socket
setproctitle
线程初始化
主循环
cond_wait(ngx_posted_events_mutex)
ngx_event_thread_process_posted
子进程进入主循环
对控制标志位对线程进行相应控制动作
ngx_process_events_and_timers
ngx_accept_mutex
ngx_event_process_posted(cycle, &ngx_posted_accept_events);
if (ngx_threaded) {
ngx_wakeup_worker_thread(cycle);
} else {
ngx_event_process_posted(cycle, &ngx_posted_events);
}
PS:
Nginx和apache一样,通过mutex保证只有一个子进程在accept。
而lighttpd多个子进程都会去监听,有惊群现象(EAGAIN),但是对性能影响不大
ssl
数据结构
时间,log,crc表,
系统检测,设置handler和获取系统信息(如cpu,rlimit),random初始化
如果是新bin的子进程,接管父进程的socket等信息
pid file
信号量处理
忽略
SIGSYS
SIGPIPE
SIGIO
退出
SIGQUIT
结束
SIGINT
SIGTERM
刷新配置
SIGHUP
重新打开日志
SIGUSR1
结束Accept
SIGWINCH
升级nginx/退出重新启动
SIGXCPU
定时器
SIGALRM //用于退出,如果超过1秒不退出,就对子进程发KILL信号,否则发TERM
重启子进程
SIGCHLD ///////忽略SIGCHLD信号,常作为提高并发服务器性能的一个技巧。因为并发服务器可能fork很多子进程,子进程终结后需要服务器进程wait子进程并清理资源。如果将该信号忽略,可使内核把僵尸子进程交给init进程处理,节省大量僵尸子进程占用的系统资源。
2、Master处理
初始化信号量
启动工作进程
启动缓存管理进程
进入主循环等待信号,对信号量的进行调用相应的控制动作
3. 子进程处理
初始化
读配置
sertrlimit
切换用户
设置CPU亲缘性
模块初始化
通知通道初始化
父对子进程的命令控制通过socketpair(AF_UNIX, SOCK_STREAM, 0, ngx_processes[s].channel)的socket
setproctitle
线程初始化
主循环
cond_wait(ngx_posted_events_mutex)
ngx_event_thread_process_posted
子进程进入主循环
对控制标志位对线程进行相应控制动作
ngx_process_events_and_timers
ngx_accept_mutex
ngx_event_process_posted(cycle, &ngx_posted_accept_events);
if (ngx_threaded) {
ngx_wakeup_worker_thread(cycle);
} else {
ngx_event_process_posted(cycle, &ngx_posted_events);
}
PS:
Nginx和apache一样,通过mutex保证只有一个子进程在accept。
而lighttpd多个子进程都会去监听,有惊群现象(EAGAIN),但是对性能影响不大
相关文章推荐
- 图解Nginx-Nginx进程模型1
- nginx进程模型
- nginx源码分析(3)——进程模型
- Nginx学习之六-nginx核心进程模型
- 初探Nginx架构之进程模型与事件处理机制
- nginx 之 多进程模型
- Nginx的进程模型、反向代理配置、rewrite的使用、负载均衡配置、https配置、日志切割
- nginx的进程模型
- nginx进程模型
- Nginx学习之六-nginx核心进程模型
- nginx源码分析--master和worker进程模型
- Nginx学习——进程模型(master 进程)
- nginx 源码分析 进程模型
- Nginx的进程模型
- memcached多线程模型 & nginx 多进程模型
- nginx进程模型
- Nginx学习——进程模型(worker进程)
- [nginx] 异步非阻塞多进程模型
- nginx多进程模型之配置热加载---转
- Nginx进程模型