在 Ubuntu 上优化 PHP-FPM 通常围绕 进程管理、资源限制、超时、缓存、日志和系统层面 来做。下面按「实用可调优项」给你一个较完整的指南(以 Ubuntu 20.04/22.04 + PHP 7.4/8.x 为例)。
# 查看 PHP 版本
php -v
# 配置目录
/etc/php/{version}/fpm/
# 主配置
/etc/php/{version}/fpm/php-fpm.conf
# 池配置(最常用)
/etc/php/{version}/fpm/pool.d/www.conf
修改后重启:
systemctl restart php{version}-fpm
pm = dynamic
常见模式:
static:固定进程数(高并发、内存充足)dynamic:按需伸缩(最常用)ondemand:请求才启动(省内存,但慢)pm.max_children = 120
pm.start_servers = 20
pm.min_spare_servers = 10
pm.max_spare_servers = 40
pm.max_requests = 500
max_children ≈ 可用内存 / 单个 PHP 进程内存
查看单进程内存:
ps -ylC php-fpm --sort:rss
示例:
pm.max_requests = 500
每个子进程处理 500 个请求后重启,避免内存泄漏。
request_terminate_timeout = 30s
request_slowlog_timeout = 5s
slowlog = /var/log/php-fpm/slow.log
request_terminate_timeout:防止脚本卡死slowlog:定位慢接口(非常重要)文件:
/etc/php/{version}/fpm/php.ini
memory_limit = 256M
API 服务可小一点(128M),批处理可大。
upload_max_filesize = 20M
post_max_size = 20M
max_execution_time = 30
max_input_time = 60
disable_functions = exec,passthru,shell_exec,system
apt install php-{version}-opcache
php.ini:
opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
opcache.validate_timestamps=0 ; 生产环境建议关
生产环境
validate_timestamps=0可显著提升性能(代码变动需重启 FPM)
ulimit -n
PHP-FPM 池配置:
rlimit_files = 65535
系统:
/etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535
默认:
listen = /run/php/php{version}-fpm.sock
高并发可改 TCP:
listen = 127.0.0.1:9000
Nginx 对应修改:
fastcgi_pass 127.0.0.1:9000;
listen.backlog = 511
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
fastcgi_connect_timeout 60;
fastcgi_send_timeout 60;
fastcgi_read_timeout 60;
# 查看 FPM 状态
pm.status_path = /status
# 启用后访问
http://domain/status
状态页示例:
pool: www
process manager: dynamic
active processes: 12
idle processes: 18
pm = dynamic
pm.max_children = 30
pm.start_servers = 5
opcache on
pm = static
pm.max_children = 120
opcache + redis
pm = ondemand
pm.max_children = 20
如果你愿意,可以告诉我:
我可以直接帮你写一份 可复制的 www.conf 配置。