优化 Ubuntu 上的 PHP‑FPM,核心目标是:提高并发能力、降低内存占用、减少响应延迟、避免 502/504。下面按「配置 → 系统 → 代码 → 监控」系统讲解。
配置文件位置(以 PHP 8.2 为例):
/etc/php/8.2/fpm/pool.d/www.conf
推荐:动态模式(pm = dynamic)
pm = dynamic
pm.max_children = 50
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20
pm.max_childrenmax_children = 可用内存 / 每个 PHP 进程平均内存
示例:
1500 / 40 ≈ 37
✅ 建议留余量,不要跑满内存
| 模式 | 适用场景 |
|---|---|
| static | 高并发、内存充足 |
| dynamic ✅ | 通用推荐 |
| ondemand | 低流量、节省内存 |
示例(高并发):
pm = static
pm.max_children = 60
request_terminate_timeout = 30s
request_slowlog_timeout = 5s
slowlog = /var/log/php-fpm/slow.log
✅ 避免 PHP 卡死拖垮服务器
upload_max_filesize = 32M
post_max_size = 32M
max_execution_time = 60
memory_limit = 128M
location ~ \.php$ {
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_read_timeout 60s;
fastcgi_buffer_size 128k;
fastcgi_buffers 4 256k;
}
ulimit -n
修改:
/etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535
systemctl edit php8.2-fpm
[Service]
LimitNOFILE=65535
php -m
禁用无用扩展(如 ftp、imap、ldap)
opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=16
opcache.max_accelerated_files=10000
opcache.validate_timestamps=0
opcache.revalidate_freq=0
✅ 生产环境必开
✅ 可提升 2~5 倍性能
启用:
pm.status_path = /status
Nginx:
location /status {
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
allow 127.0.0.1;
deny all;
}
访问:
curl http://127.0.0.1/status
| 错误 | 原因 | 解决 |
|---|---|---|
| 502 Bad Gateway | FPM 没启动 / socket 权限 | 检查 sock 权限 |
| 504 Gateway Timeout | PHP 执行慢 | 慢日志 + 超时 |
| CPU 100% | 死循环 / 高并发 | 限制 max_children |
| 内存不足 | 进程太多 | 减少 max_children |
pm = dynamic
pm.max_children = 40
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20
request_terminate_timeout = 30s
如果你愿意,可以告诉我:
我可以 直接给你一份定制化的 PHP‑FPM 配置。