温馨提示×

ubuntu php-fpm如何负载

小樊
39
2026-09-07 11:22:38
栏目: 编程语言

在 Ubuntu 上让 PHP-FPM 实现“负载”,通常有两种理解,我分别说明,你可以按需选择:


一、让 PHP-FPM 本身支持更高并发(进程/负载调优)

如果你说的是 PHP-FPM 扛更多请求(负载能力),重点在 www.conf 配置。

1. 找到 PHP-FPM 配置

# 以 PHP 8.1 为例
sudo nano /etc/php/8.1/fpm/pool.d/www.conf

2. 调整进程模式(pm)

推荐用 dynamicondemand

dynamic(常用)

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

ondemand(内存小机器)

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

3. 每个进程内存估算

ps -ylC php-fpm8.1 --sort:rss

一般:

  • 每个 PHP 进程 30–80MB
  • max_children ≈ 总内存 / 单进程内存

4. 重启 PHP-FPM

sudo systemctl restart php8.1-fpm

二、多 PHP-FPM 负载(多池 / 多端口 / 多实例)

如果你说的是 负载均衡 / 多 PHP-FPM 分担压力

方案 1:多个 PHP-FPM 池(不同端口)

; /etc/php/8.1/fpm/pool.d/www1.conf
[www1]
listen = 127.0.0.1:9001

; /etc/php/8.1/fpm/pool.d/www2.conf
[www2]
listen = 127.0.0.1:9002

Nginx 中:

upstream php_fpm {
    server 127.0.0.1:9001;
    server 127.0.0.1:9002;
}

location ~ \.php$ {
    fastcgi_pass php_fpm;
}

方案 2:多台服务器(真正负载均衡)

Nginx (LB)
 ├── PHP-FPM Server A
 ├── PHP-FPM Server B
 └── PHP-FPM Server C

Nginx:

upstream php_backend {
    server 10.0.0.1:9000;
    server 10.0.0.2:9000;
}

三、查看 PHP-FPM 负载状态(很重要)

开启 status

pm.status_path = /status

Nginx:

location = /status {
    fastcgi_pass unix:/run/php/php8.1-fpm.sock;
    include fastcgi_params;
}

访问:

http://your_ip/status

四、常见瓶颈

  • CPU → 优化 PHP / OPcache
  • 内存 → 降 max_children
  • IO → 用 SSD / Redis
  • FPM 太少 → 加进程

如果你能告诉我:

  • Ubuntu 版本
  • PHP 版本
  • 单台还是多台服务器
  • 当前并发量

我可以给你精确配置参数

0