温馨提示×

ubuntu php-fpm如何调参

小樊
37
2026-09-22 15:48:47
栏目: 编程语言

在 Ubuntu 上优化 PHP-FPM 参数,核心目标是:根据服务器资源(CPU、内存)和访问量,合理配置进程模型与资源限制。下面以 PHP 7.x / 8.x + Nginx 常见场景为例说明。


一、找到 PHP-FPM 配置文件

通常路径:

/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

二、最重要的参数(pool 配置)

1️⃣ 进程管理模式(pm)

pm = dynamic

常见三种:

  • static:固定进程数(性能最好,但费内存)
  • dynamic:动态增减(最常用)
  • ondemand:按需启动(适合低流量)

2️⃣ dynamic 模式核心参数(重点)

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 进程内存

示例:

  • 服务器 4G 内存
  • 每个 PHP 进程约 40MB
4096 / 40 ≈ 100

建议保守一点:

pm.max_children = 80

3️⃣ 防止内存泄漏

pm.max_requests = 500

含义:

  • 每个子进程处理 500 个请求后重启
  • 避免内存慢慢涨

推荐:

  • 普通业务:300~1000
  • 内存敏感:200

三、超时与资源限制(很关键)

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

作用:

  • 防止 PHP 卡死拖垮整个 FPM
  • 慢日志可定位性能问题

四、PHP 本身参数(php.ini)

路径:

/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(强烈建议开启)

opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=10000
opcache.revalidate_freq=60

开启后:

  • PHP 性能可提升 2~5 倍

六、不同场景推荐配置

✅ 小型网站(1~2G 内存)

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

✅ 中型站点(4G,日均几万 PV)

pm.max_children = 80
pm.start_servers = 20
pm.min_spare_servers = 10
pm.max_spare_servers = 40

✅ 高并发 API(8G+)

pm = static
pm.max_children = 120
pm.max_requests = 1000

七、监控 PHP-FPM 状态(很重要)

启用 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 processes
  • idle processes
  • max children reached

八、常见问题排查

PHP-FPM 经常 502

  • pm.max_children 太小
  • request_terminate_timeout 太短
  • CPU 或内存被打满

内存暴涨

  • 关掉不必要的扩展
  • 降低 memory_limit
  • 开启 pm.max_requests

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

  • 服务器配置(CPU / 内存)
  • 访问量(PV / QPS)
  • PHP 版本
  • 是网站 / API / 后台

我可以直接帮你算一套 最优参数

0