温馨提示×

ubuntu php-fpm怎样提升并发能力

小樊
38
2026-09-01 11:39:28
栏目: 编程语言

在 Ubuntu 上提升 PHP-FPM 并发能力,通常从 PHP-FPM 配置、系统资源、Web 服务器、代码与缓存 几个方面入手。下面按优先级和可操作性给你一套实用方案。


一、核心:优化 PHP-FPM 进程模型(最重要)

PHP-FPM 的并发能力主要由 进程/线程数 决定。

1. 选择并理解 process manager

编辑池配置(通常是):

sudo vim /etc/php/*/fpm/pool.d/www.conf

常见三种模式:

dynamic(最常用)

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

static(高并发、内存充足)

pm = static
pm.max_children = 200

⚠️ ondemand(省内存,但高并发延迟大)

pm = ondemand
pm.max_children = 100

2. 如何算 max_children(关键公式)

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

查看单进程内存:

ps -ylC php-fpm --sort:rss

示例:

  • 服务器 8G
  • 单进程 40MB
  • 留 2G 给系统
(8G - 2G) / 40MB ≈ 150

✅ 推荐:不要超过内存极限,否则会 swap,性能暴跌


3. 请求队列(防止 502)

pm.max_requests = 500

防止内存泄漏,定期回收进程。


二、Web 服务器配合(Nginx 示例)

1. Nginx 与 PHP-FPM 的通信方式

Unix Socket(推荐,性能更好)

listen = /run/php/php-fpm.sock

Nginx:

fastcgi_pass unix:/run/php/php-fpm.sock;

⚠️ TCP(127.0.0.1:9000)略慢,但方便多机。


2. Nginx 并发参数

worker_processes auto;
worker_connections 10240;

三、系统层面优化(很容易被忽略)

1. 文件描述符限制

ulimit -n

修改:

sudo vim /etc/security/limits.conf
* soft nofile 100000
* hard nofile 100000

PHP-FPM:

rlimit_files = 100000

2. 内核参数(高并发必备)

sudo vim /etc/sysctl.conf
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_tw_reuse = 1
sudo sysctl -p

四、PHP 本身优化

1. 使用 OPcache(必开)

sudo apt install php-opcache
opcache.enable=1
opcache.memory_consumption=256
opcache.max_accelerated_files=10000
opcache.validate_timestamps=0 ; 生产环境

2. 禁用不需要的扩展

减少内存和加载时间。


五、架构级提升(终极方案)

如果单机已经优化到极限:

Redis / Memcached 缓存静态资源走 CDNPHP-FPM 多池隔离

[www]
[api]

负载均衡 + 多台 PHP-FPM


六、快速检查是否瓶颈在 PHP-FPM

sudo systemctl status php*-fpm

或看:

sudo tail -f /var/log/php*-fpm.log

常见现象:

  • 502 → 进程不够
  • CPU 满 → 代码或并发过高
  • 内存满 → max_children 太大

七、推荐生产配置(示例)

8G 内存 / Nginx + PHP-FPM

pm = dynamic
pm.max_children = 120
pm.start_servers = 30
pm.min_spare_servers = 20
pm.max_spare_servers = 60
pm.max_requests = 1000

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

  • Ubuntu 版本
  • PHP 版本
  • 内存 & CPU
  • 使用的是 Nginx 还是 Apache

我可以直接帮你算 最优 PHP-FPM 参数

0