功能PHP-FPM(PHPFastCGIProcessManager)意思是:PHPFastCGI进程管理器,用于管理PHP进程池的软件,用于接受web服务器请求。PHP-FPM提供了更好的PHP进程管理方式,可以有效控制内存和进程,可以平滑的重新加载PHP配置。(1).为什么出现php-fpmfpm都是因为php-fastcgi.实现很好地管理php-fastcgi的程序(2)。什么是php-fastcgi?).(3)为什么不调用php-cgi其实在php-fastcgi出现之前就有了php-cgi,但是执行效率低,所以被php-fastcgi代替了。(4)fastcgi和cgi有什么区别?亲爱的朋友们,这是一个很大的不同。当一个服务web-server(nginx)分发一个请求时,通过匹配后缀知道这个请求是一个动态的php请求,它会把这个请求传递给php。在cgi时代,思想还是比较保守的。每次请求后总是读取php.ini中的基本配置信息,初始化执行环境,创建进程,每次读取配置,初始化环境,返回数据,退出进程,随着时间的推移,启动的工作这个过程变得乏味和乏味。当php来到5时代,大家对这种工作方式特别反感。想偷懒的人拼命想,可不可以让cgi一次启动一个主进程(master),让他只读一次配置,然后再启动多个工作进程(workers),有请求来就传过去通过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请求。安装PHP5.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子进程数超过该值,PHP-FPM主进程将优雅重启。emergency_restart_threshold=10#设置emergency_restart_interval设置使用的时间跨度。emergency_restart_interval=1m配置进程池PHP-FPM配置文件的其余部分是一个称为池定义的区域。该区域的配置用户设置每个PHP-FPM进程池。PHP-FPM进程池是一系列相关的PHP子进程。通常PHP应用程序有自己的进程池。Centos在PHP-FPM主配置文件的顶部引入了进程池定义文件:include=/etc/php7/php-fpm.d/*.confwww.conf是PHP-FPM进程池的默认配置文件。user=nobody#在这个PHP-FPM进程池中拥有子进程的系统用户。要将此设置的值设置为的非根用户的用户名。group=nobody#在这个PHP-FPM进程池中拥有子进程的系统用户组。将此设置的值设置为应用程序的非根用户所属的用户组的名称。listen=[::]]:9000#PHP-FPM进程池监听的IP地址和端口号,让PHP-FPM只接受从这里传入的nginx请求。listen.allowedclients=127.0.0.1#可以向这个PHP-FPM进程池发送请求的IP地址(一个或多个)。pm.maxchildren=51#这个设置设置任意时间点PHP-FPM进程池中的最大进程数。此设置没有绝对正确的值,您应该测试您的PHP应用程序,确定每个PHP进程需要使用多少内存,然后将此设置设置为设备可用内存可以容纳的PHP进程总数。对于大多数中小型PHP应用程序,每个PHP进程使用5~15MB的内存(具体数量可能会有所不同)。假设我们使用设备为这个PHP-FPM进程池分配512MB的可用内存,那么我们可以将这个设置设置为(512MB总内存)/(每个进程使用10MB)=51个进程。...编辑保存,重启PHP-FPM主进程:sudosystemctlrestartphp-fpm.servicePHP-FPM进程池配置详见http://php.net/manual/install.fpm.configuration.php参考公司开发environment测试环境配置如下:[www]user=nobody#进程的发起者用户和用户组,user用户必须设置,组不是nobodyAnyusergroup=nobodylisten=[::]:9000#监听ip和端口,[::]代表任意ipchdir=/app#程序启动时,会转到指定位置(这个是相对路径,相对于当前路径或者chroot后的“/”目录) pm=dynamic#选择进程池管理器如何控制子进程数子进程是动态的,它的个数是根据下面说明取值的(以下都是动态适用的parameters)pm.max_children=16#最大可同时入库的子进程数pm.start_servers=4#启动时启动的子进程数pm.min_spare_servers=2#处于空闲“idle”状态的最小值子进程,如果空闲子进程数小于这个值,那么就会创建相应的子进程pm.max_spare_servers=16#最大空闲子进程数,如果空闲子进程数超过这个值,那么相应的子进程将被杀死。catch_workers_output=Yes#将worker的标准输出和错误输出重定向到主错误日志记录,如果不设置,根据FastCGI规范,会重定向到/dev/null生产环境配置:转发请求到PHP-FPMnginx作为一个示例:服务器{listen83;服务器名称mobile.com;根/应用程序/移动/网络/;error_page500502503504/50x.html;location=/50x.html{root/usr/share/nginx/html;}location/{indexindex.htmlindex.htmindex.php;#将所有非真实文件重定向到index.phptry_files$uri$uri//index.php$is_args$args;}#将HTTP请求转发到PHP-FPM进程池进行处理location~.*\.phpincludefastcgi_params;fastcgi_paramSCRIPT_FILENAME$document_root$fastcgi_script_name;fastcgi_pass192.168.33.30:9000;#监听9000端口fastcgi_indexindex.php;trygi_files$urin=404;.conf;}位置~/\.(ht|svn|git){全部拒绝;}access_log/app/wwwlogs/access.log;error_log/app/wwwlogs/error.log;}思考[x]思考题:服务器的并发取决于哪些因素?PHP-FPM最大进程数、nginx并发数(nginx只充当代理服务器)、内存占用、cpu开销服务器QPS(每秒处理的请求数)=平均请求连接数*(1/响应时间);并发数=有效时间*QPS;解决方法:根据计算的并发量增加机器分流需要增加机器增加新的单机可以开启phpopcache,增加内存空间和连接缓存系统sql优化php优化...
