在 CentOS 上配置 PHP 并发能力,主要取决于你使用的是哪种 PHP 运行模式。最常见的是 PHP-FPM(推荐),下面是完整且实用的配置思路。
大多数现代 CentOS 服务器使用的是 PHP-FPM + Nginx/Apache。
php -v
ps -ef | grep php-fpm
如果看到 php-fpm 进程,说明是 PHP-FPM。
PHP-FPM 的并发能力由 进程管理方式(pm) 决定。
常见路径(以 PHP 7.4 为例):
/etc/php-fpm.d/www.conf
或:
/etc/php/7.4/fpm/pool.d/www.conf
pm = dynamic
pm.max_children = 50
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20
pm.max_requests = 500
| 参数 | 含义 |
|---|---|
pm |
进程管理方式 |
pm.max_children |
同时处理的最大 PHP 进程数(最重要) |
pm.start_servers |
启动时的进程数 |
pm.min_spare_servers |
最小空闲进程 |
pm.max_spare_servers |
最大空闲进程 |
pm.max_requests |
每个子进程处理多少请求后重启(防内存泄漏) |
| 模式 | 适用场景 |
|---|---|
dynamic ✅ |
默认推荐,适合大多数网站 |
static |
高并发、稳定流量 |
ondemand |
低流量、节省内存 |
✅ 推荐配置
pm = dynamic
max_children ≈ 可用内存 / 每个 PHP 进程占用内存
top -p $(pgrep php-fpm | head -1)
或:
ps -ylC php-fpm --sort:rss
假设:
(4096 - 1024) / 40 ≈ 76
✅ 可设置:
pm.max_children = 70
location ~ \.php$ {
fastcgi_pass unix:/run/php-fpm/www.sock;
fastcgi_index index.php;
include fastcgi.conf;
}
✅ 确保 nginx.conf 中:
worker_processes auto;
worker_connections 10240;
ulimit -n
建议设置:
* soft nofile 65535
* hard nofile 65535
写入:
/etc/security/limits.conf
mkdir -p /etc/systemd/system/php-fpm.service.d
# override.conf
[Service]
LimitNOFILE=65535
systemctl daemon-reload
systemctl restart php-fpm
ps aux | grep php-fpm | wc -l
ab -n 1000 -c 100 http://yourdomain.com/
pm.max_children 太小max_children 太大pm = dynamic
pm.max_children = 60
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20
pm.max_requests = 500
如果你愿意,可以告诉我:
我可以帮你 给出一套精确数值的最优配置。