在 Ubuntu 上让 PHP-FPM 实现“负载”,通常有两种理解,我分别说明,你可以按需选择:
如果你说的是 PHP-FPM 扛更多请求(负载能力),重点在 www.conf 配置。
# 以 PHP 8.1 为例
sudo nano /etc/php/8.1/fpm/pool.d/www.conf
推荐用 dynamic 或 ondemand:
pm = dynamic
pm.max_children = 100
pm.start_servers = 20
pm.min_spare_servers = 10
pm.max_spare_servers = 30
pm = ondemand
pm.max_children = 100
pm.process_idle_timeout = 10s
ps -ylC php-fpm8.1 --sort:rss
一般:
max_children ≈ 总内存 / 单进程内存sudo systemctl restart php8.1-fpm
如果你说的是 负载均衡 / 多 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;
}
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;
}
pm.status_path = /status
Nginx:
location = /status {
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
include fastcgi_params;
}
访问:
http://your_ip/status
max_children如果你能告诉我:
我可以给你精确配置参数。