pm.max_children是php-fpm进程池的核心参数,决定了同时处理请求的最大进程数量。其设置需结合CPU核心数、请求类型和内存容量综合判断:
pm.max_children = CPU核心数 × 1.0~1.2(例如4核CPU可设为4~5)。pm.max_children = CPU核心数 × 1.5~2.0(例如4核CPU可设为6~8)。free -h,如16GB);ps -ylC php-fpm --sort:rss,取平均值,如20MB);pm.max_children取CPU计算值与内存计算值中的较小值(例如4核CPU计算得8,内存计算得512,则取8)。php-fpm支持三种进程管理模式,不同模式的参数配置逻辑不同:
dynamic(动态模式,推荐):
根据负载自动调整进程数,适合请求量波动大的场景(如电商网站)。需设置以下参数:
pm.start_servers:启动时的初始进程数,建议为pm.max_children × 0.7(如max_children=8,则设为5~6);pm.min_spare_servers:最小空闲进程数,建议为pm.max_children × 0.5(如max_children=8,则设为4);pm.max_spare_servers:最大空闲进程数,建议为pm.max_children × 0.9(如max_children=8,则设为7)。static(静态模式):
固定进程数,适合请求稳定的场景(如内部系统)。直接设置pm.max_children为计算出的最佳值,无需其他动态参数。
ondemand(按需模式):
无请求时进程数为0,请求到来时创建进程,适合低流量场景。需设置pm.max_children为最佳值,pm.process_idle_timeout(进程空闲超时时间,如10s)。
pm.max_requests:
每个子进程处理的最大请求数,用于防止内存泄漏。建议设置为500~1000,达到阈值后自动重启进程(如pm.max_requests = 500)。
request_terminate_timeout:
单个请求的最大执行时间(秒),避免长时间运行的请求占用进程资源。建议设置为30~60秒(如request_terminate_timeout = 30)。
listen.backlog:
PHP-FPM监听队列长度,处理高并发时的请求排队。建议设置为65535(如listen.backlog = 65535)。
pm.max_children;sudo systemctl restart php版本号-fpm);top、htop监控CPU、内存使用率;php-fpm status(需开启pm.status_path)查看活跃进程数、空闲进程数;pm.max_children,CPU利用率低则增加pm.start_servers)。通过以上步骤,可根据Ubuntu服务器的实际资源和使用场景,合理设置php-fpm进程数,平衡性能与资源消耗。