温馨提示×

ubuntu php-fpm怎样调线程

小樊
40
2026-09-28 13:47:02
栏目: 编程语言

在 Ubuntu 上,PHP 一般是通过 PHP‑FPM(FastCGI Process Manager) 运行的,而 PHP‑FPM 并不是“线程”模型,而是“进程 + 子进程(worker)”模型。所以你说的“调线程”,实际通常是调整 PHP‑FPM 的进程数 / 子进程数。

下面按常见场景说明。


一、找到 PHP‑FPM 配置位置

先确认 PHP 版本(以 8.1 为例):

php -v

配置文件一般在:

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

(如果是 7.4,就是 /etc/php/7.4/fpm/pool.d/www.conf)


二、核心参数(最重要)

编辑:

sudo nano /etc/php/8.1/fpm/pool.d/www.conf

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

pm = dynamic

常见三种:

模式 说明
static 固定进程数(性能最好,内存占用高)
dynamic 动态进程(最常用)
ondemand 按需启动(省内存,响应慢)

2️⃣ dynamic 模式关键参数

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

含义:

  • pm.max_children:最多同时运行的 PHP 进程数(最重要)
  • pm.start_servers:启动时的进程数
  • min_spare_servers:最小空闲进程
  • max_spare_servers:最大空闲进程

✅ 经验公式(粗略):

max_children ≈ 可用内存 / 单个 PHP 进程内存

例如:

  • 服务器 2G 内存
  • 每个 PHP 进程约 40MB
  • 建议 max_children ≈ 40~50

3️⃣ static 模式(高并发推荐)

pm = static
pm.max_children = 100

适合:

  • 高并发
  • 内存充足
  • 不想频繁创建/销毁进程

三、请求队列 & 超时(也很重要)

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

防止:

  • 脚本卡死
  • 进程被占满

四、修改后必须重启

sudo systemctl restart php8.1-fpm

查看状态:

systemctl status php8.1-fpm

五、查看当前 PHP‑FPM 进程数

ps aux | grep php-fpm

或:

top -u www-data

六、常见误区

❌ PHP‑FPM 没有“线程数”
✅ 调的是 进程数(workers)

❌ 调 nginx worker_threads 不等于 PHP 并发
✅ PHP 并发由 pm.max_children 决定


七、如果你愿意,我可以帮你算

你可以告诉我:

  1. Ubuntu 版本
  2. PHP 版本
  3. 服务器内存
  4. 网站类型(API / 商城 / 普通官网)

我可以直接给你一套 推荐配置。

0 踩