主题:到底php-fpm是什么???怎么用???
背景关键词:CGI FAST-CGI
1.什么是CGI?
最最最最先的网页,网站都只能是静态。随着发展的需要,处理动态的网站成为必要,此刻CGI(通用网关接口)登场,CGI是用于处理webserver和浏览器进行交互的协议。可将html页面上的数据传递到php解释器,然后php解释器处理完成后将数据解析成html返回给浏览器。
2.什么是FAST-CGI?
CGI的改良版,CGI只能一个请求fork出一个worker,然后kill掉,再有请求再循环,这样很浪费资源,FAST-CGI每次处理完请求后,不会kill掉这个进程,而是保留这个进程,使这个进程可以一次处理多个请求。这样每次就不用重新fork一个进程了,大大提高了效率。
3.什么是PHP-FPM?
PHP-FPM即php-Fastcgi Process Manager,是 FastCGI 在php中的应用,专用于php进程管理。php-fpm进程管理流程图如下
4.php-fpm进程启动模式说明
pm = dynamic/static/ondemand 设置php-fpm进程启动模式
dynamic 动态进程,常用模式,首先在fpm启动时按照`pm.start_servers`初始化一定数量的worker,运行期间如果master发现空闲worker数低于`pm.min_spare_servers`配置数(表示请求比较多,worker处理不过来了)则会fork worker进程,但总的worker数不能超过`pm.max_children`,如果master发现空闲worker数超过了`pm.max_spare_servers`(表示闲着的worker太多了)则会杀掉一些worker,避免占用过多资源,master通过这4个值来控制worker数
static 这种方式比较简单,在启动时master按照`pm.max_children`配置fork出相应数量的worker进程,即worker进程数是固定不变的
ondemand这种方式一般很少用,在启动时不分配worker进程,等到有请求了后再通知master进程fork worker进程,总的worker数不超过`pm.max_children`,处理完成后worker进程不会立即退出,当空闲时间超过`pm.process_idle_timeout`后再退出
5.php-fpm.conf配置优化
最后推荐看一本书:php内核剖析 上面有讲解的很详细