温馨提示×

如何提升Linux服务器PHP的并发能力

小樊
43
2025-11-30 12:36:54
栏目: 云计算

提升 Linux 服务器 PHP 并发能力的实用方案

一 架构与进程模型选择

  • 采用 PHP-FPM 作为进程管理器,优先使用 Unix SocketNginx/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)避免长请求拖垮进程池;
    • 开启 slowlogrequest_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/超时/缓存/连接 → 复测 → 回归与灰度上线 → 持续监控与滚动优化。

0