在 Ubuntu 上优化 PHP-FPM 参数,核心目标是:根据服务器资源(CPU、内存)和访问量,合理配置进程模型与资源限制。下面以 PHP 7.x / 8.x + Nginx 常见场景为例说明。
通常路径:
/etc/php/8.1/fpm/pool.d/www.conf
版本号可能是
7.4 / 8.0 / 8.1 / 8.2
主配置(一般不用改):
/etc/php/8.1/fpm/php-fpm.conf
修改后重启:
systemctl restart php8.1-fpm
pm = dynamic
常见三种:
static:固定进程数(性能最好,但费内存)dynamic:动态增减(最常用)ondemand:按需启动(适合低流量)pm.max_children = 50
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20
pm.max_requests = 500
pm.max_children公式:
max_children ≈ 总内存 / 单个 PHP 进程内存
示例:
4096 / 40 ≈ 100
建议保守一点:
pm.max_children = 80
pm.max_requests = 500
含义:
推荐:
300~1000200request_terminate_timeout = 30s
request_slowlog_timeout = 10s
slowlog = /var/log/php-fpm/slow.log
作用:
路径:
/etc/php/8.1/fpm/php.ini
常用优化:
memory_limit = 128M
max_execution_time = 30
upload_max_filesize = 20M
post_max_size = 20M
opcache.enable=1
opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=10000
opcache.revalidate_freq=60
开启后:
pm = dynamic
pm.max_children = 20
pm.start_servers = 5
pm.min_spare_servers = 3
pm.max_spare_servers = 10
pm.max_children = 80
pm.start_servers = 20
pm.min_spare_servers = 10
pm.max_spare_servers = 40
pm = static
pm.max_children = 120
pm.max_requests = 1000
启用 status:
pm.status_path = /status
Nginx 配置:
location /status {
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
include fastcgi_params;
}
查看:
curl http://localhost/status
重点看:
active processesidle processesmax children reachedpm.max_children 太小request_terminate_timeout 太短memory_limitpm.max_requests如果你愿意,可以告诉我:
我可以直接帮你算一套 最优参数。