下面从常见场景出发,系统性地讲一下 Ubuntu 下优化 PHP-FPM 的方法,适用于 Laravel / WordPress / 高并发 API 等环境。
php -v
常见版本:
/etc/php/8.2/fpm/
主要文件:
php.ini # PHP 参数
pool.d/www.conf # PHP-FPM 进程池(重点)
推荐:pm = dynamic(通用)
pm = dynamic
| 模式 | 适用场景 |
|---|---|
| static | 稳定高并发(内存充足) |
| dynamic ✅ | 通用 |
| ondemand | 低流量、节省内存 |
以 2C4G 服务器为例:
pm.max_children = 50
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20
max_childrenmax_children ≈ 可用内存 / 单个 PHP 进程内存
查看单个 PHP 进程内存:
ps -ylC php-fpm --sort:rss
示例:
单进程 60MB
4G 内存,留 1G 给系统
可用 3G ÷ 60MB ≈ 50
✅ 不要盲目设置过大
request_terminate_timeout = 30s
防止慢请求卡死进程。
pm.max_requests = 500
medium 项目推荐:
300 ~ 1000
memory_limit = 256M
Laravel / API:
512M
upload_max_filesize = 50M
post_max_size = 50M
max_execution_time = 60
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
✅ Laravel / 生产环境必开
fastcgi_read_timeout 60s;
fastcgi_buffer_size 128k;
fastcgi_buffers 8 128k;
listen = /run/php/php8.2-fpm.sock
Nginx:
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
ulimit -n
建议:
ulimit -n 65535
systemctl edit php8.2-fpm
[Service]
LimitNOFILE=65535
systemctl status php8.2-fpm
pm.status_path = /status
Nginx:
location /status {
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
}
php-fpm 未启动 / socket 权限错误
修复:
chown www-data:www-data /run/php/php8.2-fpm.sock
PHP Fatal error: Allowed memory size exhausted
✅ 增加 memory_limit 或优化代码
pm = dynamic
pm.max_children = 50
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20
pm.max_requests = 500
request_terminate_timeout = 30s
✅ 根据你的 服务器配置(CPU / 内存) 给你精确参数
✅ 针对 Laravel / WordPress / API 单独优化
✅ 帮你排查 502 / 504 / 高负载问题
直接告诉我:
服务器配置 + 使用场景 + PHP 版本