PHP-FPM详解
作用
PHP-FPM(PHP FastCGI Process Manager)意:PHP FastCGI 进程管理器,用于管理PHP 进程池的软件,用于接受web服务器的请求。
PHP-FPM提供了更好的PHP进程管理方式,可以有效控制内存和进程、可以平滑重载PHP配置。
(1). 为什么会出现php-fpm
fpm的出现全部因为php-fastcgi出现。为了很好的管理php-fastcgi而实现的一个程序
(2). 什么是php-fastcgi
php-fastcgi 只是一个cgi程序,只会解析php请求,并且返回结果,不会管理(因此才出现的php-fpm)。
(3)为什么不叫php-cgi
其实在php-fastcgi出现之前是有一个php-cgi存在的,只是它的执行效率低下,因此被php-fastcgi取代。
(4)那fastcgi和cgi有什么区别呢?
亲们,这区别就大了,当一个服务web-server(nginx)分发过来请求的时候,通过匹配后缀知道该请求是个动态的php请求,会把这个请求转给php。
在cgi的年代,思想比较保守,总是一个请求过来后,去读取php.ini里的基础配置信息,初始化执行环境,每次都要不停的去创建一个进程,读取配置,初始化环境,返回数据,退出进程,久而久之,启动进程的工作变的乏味无趣特别累。
当php来到了5的时代,大家对这种工作方式特别反感,想偷懒的人就拼命的想,我可不可以让cgi一次启动一个主进程(master),让他只读取一次配置,然后在启动多个工作进程(worker),当一个请求来的时候,通过master传递给worker这样就可以避免重复劳动了。于是就产生了fastcgi。
(5)fastcgi这么好,启动的worker用完怎么办?
当worker不够的时候,master会通过配置里的信息,动态启动worker,等空闲的时候可以收回worker
(6)到现在还是没明白php-fpm 是个什么东西?
就是来管理启动一个master进程和多个worker进程的程序.
PHP-FPM 会创建一个主进程,控制何时以及如何将HTTP请求转发给一个或多个子进程处理。PHP-FPM主进程还控制着什
么时候创建(处理Web应用更多的流量)和销毁(子进程运行时间太久或不再需要了)
PHP子进程。PHP-FPM进程池中的每个进程存在的时间都比单个HTTP请求长,可以处
理10、50、100、500或更多的HTTP请求。
安装
PHP在 5.3.3 之后已经把php-fpm并入到php的核心代码中了。 所以php-fpm不需要单独的下载安装。
要想php支持php-fpm,只需要在编译php源码的时候带上 --enable-fpm 就可以了。
全局配置
在Centos中,PHP-FPM 的主配置文件是 /etc/php7/php-fpm.conf。
指定一段时间内有指定个子进程失效了,PHP-FPM重启:
配置进程池
PHP-FPM配置文件其余的内容是一个名为Pool Defintions的区域。这个区域里的配置用户设置每个PHP-FPM进程池。PHP-FPM进程池中是一系列相关的PHP子进程。==通常一个PHP应用有自己一个进程池==。
Centos在PHP-FPM主配置文件的顶部引入进程池定义文件:
www.conf 是PHP-FPM进程池的默认配置文件。
编辑保存,重启PHP-FPM主进程:
PHP-FPM进程池的配置详情参见 http://php.net/manual/install.fpm.configuration.php
参考Company开发环境
测试环境的配置如下:
生产环境配置:
转发请求给PHP-FPM
nginx为例:
思考
- [x] 思考问题:
服务器的并发量取决哪些因素?
PHP-FPM最大进程数、nginx并发数(nginx只是充当代理服务器的角色)、内存的占用、cpu的开销
服务器的QPS(每秒处理请求数) = 平均请求连接数*(1/响应时间);
并发量 = 有效时间*QPS;
- 解决:
- 加机器分流
- 根据并发量计算需加机器
- 增加单机新能
- 开启php的opcache,增加内存空间
- 接缓存系统
- sql优化
- php优化
...
参考
作用
PHP-FPM(PHP FastCGI Process Manager)意:PHP FastCGI 进程管理器,用于管理PHP 进程池的软件,用于接受web服务器的请求。
PHP-FPM提供了更好的PHP进程管理方式,可以有效控制内存和进程、可以平滑重载PHP配置。
(1). 为什么会出现php-fpm
fpm的出现全部因为php-fastcgi出现。为了很好的管理php-fastcgi而实现的一个程序
(2). 什么是php-fastcgi
php-fastcgi 只是一个cgi程序,只会解析php请求,并且返回结果,不会管理(因此才出现的php-fpm)。
(3)为什么不叫php-cgi
其实在php-fastcgi出现之前是有一个php-cgi存在的,只是它的执行效率低下,因此被php-fastcgi取代。
(4)那fastcgi和cgi有什么区别呢?
亲们,这区别就大了,当一个服务web-server(nginx)分发过来请求的时候,通过匹配后缀知道该请求是个动态的php请求,会把这个请求转给php。
在cgi的年代,思想比较保守,总是一个请求过来后,去读取php.ini里的基础配置信息,初始化执行环境,每次都要不停的去创建一个进程,读取配置,初始化环境,返回数据,退出进程,久而久之,启动进程的工作变的乏味无趣特别累。
当php来到了5的时代,大家对这种工作方式特别反感,想偷懒的人就拼命的想,我可不可以让cgi一次启动一个主进程(master),让他只读取一次配置,然后在启动多个工作进程(worker),当一个请求来的时候,通过master传递给worker这样就可以避免重复劳动了。于是就产生了fastcgi。
(5)fastcgi这么好,启动的worker用完怎么办?
当worker不够的时候,master会通过配置里的信息,动态启动worker,等空闲的时候可以收回worker
(6)到现在还是没明白php-fpm 是个什么东西?
就是来管理启动一个master进程和多个worker进程的程序.
PHP-FPM 会创建一个主进程,控制何时以及如何将HTTP请求转发给一个或多个子进程处理。PHP-FPM主进程还控制着什
么时候创建(处理Web应用更多的流量)和销毁(子进程运行时间太久或不再需要了)
PHP子进程。PHP-FPM进程池中的每个进程存在的时间都比单个HTTP请求长,可以处
理10、50、100、500或更多的HTTP请求。
安装
PHP在 5.3.3 之后已经把php-fpm并入到php的核心代码中了。 所以php-fpm不需要单独的下载安装。
要想php支持php-fpm,只需要在编译php源码的时候带上 --enable-fpm 就可以了。
全局配置
在Centos中,PHP-FPM 的主配置文件是 /etc/php7/php-fpm.conf。
指定一段时间内有指定个子进程失效了,PHP-FPM重启:
配置进程池
PHP-FPM配置文件其余的内容是一个名为Pool Defintions的区域。这个区域里的配置用户设置每个PHP-FPM进程池。PHP-FPM进程池中是一系列相关的PHP子进程。==通常一个PHP应用有自己一个进程池==。
Centos在PHP-FPM主配置文件的顶部引入进程池定义文件:
www.conf 是PHP-FPM进程池的默认配置文件。
编辑保存,重启PHP-FPM主进程:
PHP-FPM进程池的配置详情参见 http://php.net/manual/install.fpm.configuration.php
参考Company开发环境
测试环境的配置如下:
生产环境配置:
转发请求给PHP-FPM
nginx为例:
思考
- [x] 思考问题:
服务器的并发量取决哪些因素?
PHP-FPM最大进程数、nginx并发数(nginx只是充当代理服务器的角色)、内存的占用、cpu的开销
服务器的QPS(每秒处理请求数) = 平均请求连接数*(1/响应时间);
并发量 = 有效时间*QPS;
- 解决:
- 加机器分流
- 根据并发量计算需加机器
- 增加单机新能
- 开启php的opcache,增加内存空间
- 接缓存系统
- sql优化
- php优化
...
参考