apache不直接控制php进程数,真正决定权在php运行模式:mod_php时由mpm参数(如maxrequestworkers)间接决定;php-fpm时则通过pool配置中pm.max_children等参数独立精细调控。

Apache 本身不直接控制 PHP 解释器的进程数,真正决定 PHP 进程数量的是 PHP 的运行模式。只有切换到 PHP-FPM 模式,才能独立、精细地配置 PHP 进程数;而传统的 mod_php 是嵌入 Apache 子进程中的,其“进程数”实际由 Apache 的 MPM(如 event 或 prefork)参数间接决定,并非 PHP 自身可调。
确认当前 PHP 运行模式
先明确你用的是哪种 SAPI(服务器 API),这是调整的前提:
- 新建一个
info.php,内容为<?php phpinfo(); ?>,访问后查看 Server API 一行: -
apache2handler→ 使用mod_php(无独立 PHP 进程) -
fpm-fcgi→ 使用 PHP-FPM(可独立配置进程池) -
cgi-fcgi→ 已淘汰,不推荐
若使用 PHP-FPM:在 pool 配置中设置进程数
这是最常用也最推荐的方式。编辑 PHP-FPM 的进程池配置文件,通常位于:
/etc/php/*/fpm/pool.d/www.conf关键参数如下:
-
pm = dynamic(推荐)或static/ondemand -
pm.max_children = 32→ 同时存在的最大 PHP 子进程数(核心限制) -
pm.start_servers = 4→ 启动时创建的子进程数 -
pm.min_spare_servers = 2→ 空闲时最少保持的进程数 -
pm.max_spare_servers = 8→ 空闲时最多允许的进程数
调整后需重启 PHP-FPM:sudo systemctl restart php*-fpm(版本号需替换,如 php8.2-fpm)。
若坚持用 mod_php:通过 Apache MPM 参数间接影响
此时没有“PHP 进程”,只有 Apache 子进程,每个子进程内含一个 PHP 解释器实例。因此要控制并发 PHP 执行能力,需调整 Apache 的并发处理上限:
- 对于
event或workerMPM:MaxRequestWorkers(旧版叫MaxClients)决定了最大并发请求数,也即最大同时执行的 PHP 脚本数 - 对于
preforkMPM:MaxRequestWorkers直接等于最大 Apache 子进程数,每个进程跑一个 PHP 实例 - 配套还需关注:
StartServers、MinSpareThreads、MaxSpareThreads(线程模式下)等
修改位置通常在 /etc/apache2/mods-available/mpm_event.conf 或主配置中,改完需重启 Apache。
必须同步检查的衔接配置
启用 PHP-FPM 后,Apache 必须正确代理请求过去,否则设置无效:
- 禁用
mod_php:a2dismod php* - 启用代理模块:
a2enmod proxy proxy_fcgi - 虚拟主机中用
SetHandler指向 FPM(推荐 Unix socket):
注意 socket 路径必须与 www.conf 中 listen = /run/php/php8.2-fpm.sock 完全一致,且 Apache 用户(如 www-data)对该 socket 有读写权限。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











