三种工作模式:按需、静态、动态(内存优先、静态池、服务优先)。ondemandphp-fpm启动时,不会启动worker进程。它将按需启动工作人员。一个链接进来后,会开始listen=127.0.0.1:9001pm=ondemandpm.process_idle_timeout=60pm.max_children=10连接到来时(只创建链接,不创建数据,同时创建telnet),创建一个新的worker进程,创建worker进程的个数受max_children设置限制,也受限于全局process.max设置(三种模式均受此限制,全局配置项说明下面),如果空闲时间超过了process_idle_timeout的设置,worker进程就会被销毁。优点:根据流量需求创建,不浪费系统资源,缺点:因为php-fpm是短连接,如果每次请求先建立一个连接,在大流量场景下master进程会很忙,浪费CPU,并且它不适合高流量模式。不推荐这种模式。Dynamic会初始化并创建一部分Worker,在运行过程中,动态调整worker数量,最大worker数量受pm.max_children和process.maxlisten=127.0.0.1:9001pm=dynamicpm.max_children=10pm.start_servers影响=2pm.min_spare_servers=1pm.max_spare_servers=6当空闲进程数小于min_spare_servers时,创建一个新的子进程。子进程总数小于等于pm.max_children,小于等于process.max。当空闲进程数大于max_spare_servers时,启动时间最长的子进程将被杀死。如果子进程(idle状态)数量大于max_children,则打印warninglog,结束处理进程小于max_children,计算一个num,并启动numworker优点:动态扩展,不浪费系统资源缺点:所有worker都在工作,新的请求需要等待worker进程的创建。最长等待1s(内部有一个1s定时器,用来检查和创建进程),频繁的启动和停止进程消耗cpu,请求数稳定,不需要频繁销毁static启动固定数量的worker,还有一个1s的定时器,用来统计进程的一些状态信息,比如空闲worker的数量,活跃worker的数量pm.max_children=10#这个参数必须是配置,只有这个参数有效优点:不需要动态判断负载来提高性能缺点:如果配置为static,只需要考虑max_children的个数。数量取决于cpu的数量和应用程序的响应时间。一次启动一个固定大小的进程会浪费系统资源。模式选择static适合内存大的机器,dynamic适合内存小的服务器,2g,ondemand模式适合tinymemory,2g以下的进程数并不是越多越好,进程数的增加会增加进程管理开销和进程上下文切换,并发执行数不会超过CPU核数,CPU密集型,pm.max_children不能超过cpu核数。如果不是,可以设置pm.max_children的值大于cpu核数,动态创建进程数在N+20%到M/m之间。N是cpu核心数,M是内存。m为每个php进程中的静态进程数M/(m*1.2)pm.max_requests,设置最大请求数,达到这个数后会自动长工进程,滋生内存意外增长其他配置说明#全局设置process.max=10#最大进程数#www.confuser=nobody#进程发起的用户和用户组,nobody是任何用户,user必须设置,group不需要group=wwwlisten=[::]:9000pm=dynamic#进程池管理服务器如何控制子进程数,static,static,固定值dynamicdynamicondemandpm.max_children=16#最大同时存活的子进程数pm.start_servers=4#启动时启动的子进程数pm.min_spare_servers=2#处于空闲状态的最小进程。如果空闲进程数小于这个值,就会创建对应的子进程,可以有效减少创建进程数。如果无法处理请求,将逐步创建。pm.max_spare_servers=16#最大空闲进程数,如果空闲子进程数超过这个值,那么相应的子进程就会被杀死catch_workers_output=yes#worker进程的标准输出并且错误输出会重定向到错误日志,如果没有设置,会输出到/dev/null;slowlog=xxx#默认关闭,慢日志路径;request_slowlog_timeout=0#脚本执行多长时间会记录到日志文件
