提升 Linux 服务器 PHP 并发能力的实用方案
一 架构与进程模型选择
- 采用 PHP-FPM 作为进程管理器,优先使用 Unix Socket 与 Nginx/Apache 通信,减少网络栈开销;进程模型在 dynamic/ondemand/static 间按负载选择:动态伸缩更省内存、按需更省资源、静态最稳但占用高。示例(/etc/php/{version}/fpm/pool.d/www.conf):
- listen = /run/php/php{version}-fpm.sock
- listen.owner = www-data;listen.group = www-data;listen.mode = 0660
- pm = dynamic;pm.max_children = 50;pm.start_servers = 5;pm.min_spare_servers = 5;pm.max_spare_servers = 35
- request_terminate_timeout = 30s;request_slowlog_timeout = 10s;slowlog = /var/log/php-fpm/slow.log
- 按需开启日志:catch_workers_output = yes;调整 access/error.log 级别以减少 I/O 压力。
二 计算并发上限与关键配置
- 估算最大并发进程数:max_children ≤ 可用内存 / 单进程平均内存。经验上每个 PHP-FPM 子进程常驻约 20–30MB,例如 2GB 内存可先设 ~67 个进程,再结合压测微调。
- 进程管理策略:
- dynamic:按负载增减,适合波动流量;
- ondemand:空闲回收,适合极低并发或资源紧张;
- static:固定进程数,适合稳定高并发与短任务。
- 请求治理与稳定性:
- 设置 request_terminate_timeout(如 30s)避免长请求拖垮进程池;
- 开启 slowlog 与 request_slowlog_timeout(如 10s)定位慢请求;
- 设置 pm.max_requests(如 500–1000)定期重启子进程,回收内存碎片与泄漏。
三 Web 服务器与系统层优化
- Nginx 建议(/etc/nginx/nginx.conf):
- worker_processes auto;events { worker_connections 1024; };开启 sendfile on; tcp_nopush on; keepalive_timeout 65;;
- 反向代理到 PHP-FPM:fastcgi_pass unix:/run/php/php{version}-fpm.sock;include fastcgi_params;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name。
- Apache 建议(MPM 事件/预派生):
- 事件模块示例:StartServers 2;MinSpareThreads 25;MaxSpareThreads 75;ThreadsPerChild 25;MaxRequestWorkers 150;
- 预派生模块示例:StartServers 5;MinSpareServers 5;MaxSpareServers 10;MaxRequestWorkers 150。
- 系统资源与网络:
- 提升文件描述符:/etc/security/limits.conf 设置 * soft/hard nofile 65535;
- 内核网络:net.core.somaxconn 4096;net.ipv4.tcp_max_syn_backlog 4096;按需开启 tcp_tw_reuse、tcp_syncookies;
- 监控与定位:top/htop、vmstat(cs、si/so)、iostat(%util、await)、mpstat -P ALL 1;关注 CPU 负载、上下文切换、可用内存、换页、磁盘 I/O 四大维度。
四 应用层加速与扩展方案
- 启用 OPcache(php.ini):
- opcache.enable=1;opcache.memory_consumption=128;opcache.interned_strings_buffer=8;opcache.max_accelerated_files=4000;opcache.revalidate_freq=60;
- 减少编译与文件 I/O,显著提升响应速度与吞吐。
- 数据与缓存:
- 引入 Redis/Memcached 做数据/页面缓存,降低数据库压力;
- 优化 SQL 与索引、缩短事务、合理使用连接池/长连接。
- 架构扩展:
- 使用 CDN 缓存静态资源,减少源站压力;
- 通过 Nginx/HAProxy 做负载均衡,横向扩展到多台 PHP-FPM 实例;
- 采用 Swoole/ReactPHP 等异步协程方案处理长连接、WebSocket、消息推送等高并发场景(与传统 FPM 架构互补)。
五 压测与持续监控闭环
- 基准测试:
- 使用 ab(Apache Bench)进行并发压测,例如:ab -n 100000 -c 2000 http://example.com/;逐步提升并发与请求量,观察 RPS、95/99 延迟、失败率 与错误日志。
- 监控与告警:
- 持续观察 CPU/内存/磁盘 I/O/网络 与 PHP-FPM 进程数、队列、慢日志;结合 Prometheus + Grafana 搭建可视化监控与阈值告警。
- 调优流程:
- 设定目标(如目标 RPS/延迟)→ 基线压测 → 调整 max_children/超时/缓存/连接 → 复测 → 回归与灰度上线 → 持续监控与滚动优化。