温馨提示×

如何优化Ubuntu PHP-FPM

小樊
32
2026-07-13 20:20:35
栏目: 编程语言

优化 Ubuntu 上的 PHP‑FPM,核心目标是:提高并发能力、降低内存占用、减少响应延迟、避免 502/504。下面按「配置 → 系统 → 代码 → 监控」系统讲解。


一、PHP‑FPM 核心配置优化(最重要)

配置文件位置(以 PHP 8.2 为例):

/etc/php/8.2/fpm/pool.d/www.conf

1️⃣ 进程模型(pm 设置)

推荐:动态模式(pm = dynamic)

pm = dynamic
pm.max_children = 50
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20

如何计算 pm.max_children

max_children = 可用内存 / 每个 PHP 进程平均内存

示例:

  • 服务器内存:2GB
  • 每个 PHP 进程:40MB
  • 可用内存:1.5GB
1500 / 40 ≈ 37

✅ 建议留余量,不要跑满内存


2️⃣ 静态 vs 动态 vs ondemand

模式 适用场景
static 高并发、内存充足
dynamic ✅ 通用推荐
ondemand 低流量、节省内存

示例(高并发):

pm = static
pm.max_children = 60

3️⃣ 请求超时 & 慢日志

request_terminate_timeout = 30s
request_slowlog_timeout = 5s
slowlog = /var/log/php-fpm/slow.log

✅ 避免 PHP 卡死拖垮服务器


4️⃣ 文件上传 & 执行限制

upload_max_filesize = 32M
post_max_size = 32M
max_execution_time = 60
memory_limit = 128M

二、PHP-FPM 与 Nginx 优化

1️⃣ Nginx fastcgi 参数

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;
}

三、系统层面优化

1️⃣ 文件描述符限制

ulimit -n

修改:

/etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535

2️⃣ systemd 限制

systemctl edit php8.2-fpm
[Service]
LimitNOFILE=65535

3️⃣ 关闭不必要的 PHP 扩展

php -m

禁用无用扩展(如 ftp、imap、ldap)


四、OPcache(强烈推荐)

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 倍性能


五、监控与排错

1️⃣ 查看 PHP-FPM 状态

启用:

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

2️⃣ 常见错误 & 解决

错误 原因 解决
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 8.2 / 8.3(性能提升明显)
  • ✅ 使用 JIT(PHP 8+)
  • ✅ 静态资源不走 PHP
  • ✅ Redis / Memcached 缓存
  • ✅ 数据库查询优化

如果你愿意,可以告诉我:

  • ✅ 服务器配置(CPU / 内存)
  • ✅ 网站类型(WordPress / Laravel / API)
  • ✅ 是否常出现 502 / 504

我可以 直接给你一份定制化的 PHP‑FPM 配置

0