温馨提示×

ubuntu php-fpm如何调线程数

小樊
40
2026-09-10 09:09:16
栏目: 编程语言

Ubuntu 上,PHP-FPM 并不是用“线程数”来调优,而是用 进程(worker)数 来控制并发(PHP-FPM 默认是 prefork 模式,无多线程)。

下面按常见场景说明如何调整。


一、找到 PHP-FPM 配置文件

Ubuntu 常见路径:

# PHP 7.4 示例
/etc/php/7.4/fpm/pool.d/www.conf

# PHP 8.1 示例
/etc/php/8.1/fpm/pool.d/www.conf

如果你不确定版本:

php -v

二、核心参数(最重要)

www.conf 中,重点是这几个:

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

1️⃣ pm 模式说明

模式 说明
dynamic 动态调整子进程(最常用)
static 固定进程数(性能稳定但耗内存)
ondemand 按需启动(节省内存,响应稍慢)

三、如何“调线程数”(实际是进程数)

✅ 推荐:dynamic 模式(最常用)

例如:

pm = dynamic
pm.max_children = 100
pm.start_servers = 20
pm.min_spare_servers = 10
pm.max_spare_servers = 30

如何估算 pm.max_children

公式(粗略):

max_children ≈ 总内存 / 单个 PHP 进程内存

查看单个 PHP 进程内存:

ps aux | grep php-fpm

例如:

  • 服务器 4G 内存
  • 每个 PHP 进程 ~40MB
  • 可设置:max_children ≈ 4096 / 40 ≈ 100

✅ 高并发场景:static 模式

pm = static
pm.max_children = 120

适合:

  • 内存充足
  • 高并发 API / 接口服务

✅ 内存紧张:ondemand

pm = ondemand
pm.max_children = 50
pm.process_idle_timeout = 10s

适合:

  • 低流量网站
  • 容器环境

四、修改后重启 PHP-FPM

sudo systemctl restart php7.4-fpm
# 或
sudo systemctl restart php8.1-fpm

查看状态:

systemctl status php*-fpm

五、Nginx 与 PHP-FPM 的关系(很重要)

Nginx 的 worker_processes 和 PHP-FPM 是分开的

worker_processes auto;
events {
    worker_connections 1024;
}

PHP-FPM 才是真正执行 PHP 的。


六、示例:2核4G 服务器推荐配置

pm = dynamic
pm.max_children = 80
pm.start_servers = 20
pm.min_spare_servers = 10
pm.max_spare_servers = 30

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

  • PHP 版本
  • 服务器内存 & CPU
  • 是网站 / API / 高并发场景

我可以帮你算一套 精确配置

0