首先是Apache和Nginx的区别(这里只提Nginx的好处)
Apache处理请求性能低。
Apache:一个进程处理一个请求,阻塞式;
Nginx:一个进程处理多个请求,非阻塞式;
Nginx的应用场景
Nginx只能处理静态资源,动态资源还得反向代理到应用服务器上。
下面是Nginx处理请求的过程:
Nginx有点及特点
热部署、平滑升级、开源及二次开发、高并发高性能、扩展性好、异步非阻塞的事件驱动模型
Nginx是多进程结构:
主进程Master Process管理如下几个进程:
CM(Cacah Manager)、CL(Cacah Loader)、Worker Process(这个在一般在配置文件中为auto,会根据CPU核数自己生成)。
Master Process有进程管理的功能,会把挂掉的进程拉起来,所以如果要改源码扩展尽可能不要修改Master Process。
Cacah Loader用于加载缓存
Cacah Manager用于管理缓存
而正在存储缓存的地方是在worker process里面。所有子进程都是用共享内存的方式进行通信。
下面是Linux的信号量管理机制。
最关键的就是kill关键字:
一共有64个指令,要弄清楚如下几个:
Kill -17 $PID #父子进程通信的信号量,子进程挂了,会给父进程发信号
Kill -3 $PID #将应用的运行情况dump下来。由于可以吧所有线程当前运行到哪里的情况输出
Kill -15 $PID #普通的Kill,程序退出,如果卡死,是杀不了的
Kill -9 $PID #不管在干嘛,阻塞,运行都kill
Kill -1 $PID #重新加载配置文件
利用信号量进行管理Nginx
一般不建议直接对worker进程进行管理,而是使用manager去管理
nignx是事件绑定的,他的worker子进程一般是你电脑有几颗cpu就给你多少个
在配置文件里面有个worker_processes一般是auto就是nginx自己去检测的。
如下所示:
当前Nginx只有一个worker process,原因是我这台只有一个cpu
可以通过修改配置文件,来改变,如下:
改成4,然后进行重载配置文件
这里有两条命令:
./nginx -reload
kill -1 xxxx
就可以看到:
有4个worker process了。
这里如果要改源码或者其他的操作,一般都是对worker process线程进行。
另外是./nginx -h为help