先给出几个关键结论:想要提升 Ubuntu 环境中的 PHP 并发处理能力,本质上并不是简单修改几项配置,而是一套面向性能与资源利用率的系统化优化方案。真正有效的做法,通常需要从 PHP-FPM 进程模型、PHP 运行时缓存、数据库与缓存层,再到 Linux 内核参数与系统资源限制等多个层面协同优化。下面就围绕这条主线,把提升 Ubuntu 下 PHP 高并发能力的核心环节逐项展开。

架构与进程模型
PHP 性能优化的第一步,通常就是正确选择并调优进程管理方案。目前最常见、也最成熟的方式依然是 PHP-FPM。在 PHP-FPM 与 Nginx 的连接方式上,优先建议使用 Unix Socket(例如 /run/php/php8.1-fpm.sock),因为它可以减少网络栈带来的额外开销,通常比 TCP 端口通信效率更高,更适合本机部署场景。
在进程管理策略方面,如果是刚开始做 Ubuntu PHP 并发优化,建议先使用 dynamic 模式,等业务请求特征、流量峰值和资源占用情况摸清楚后,再评估是否切换到 static 或 ondemand。下面是一组在生产环境中较常见、也比较稳妥的初始配置参数:
pm = dynamicpm.max_children = 50—— 这个参数决定 PHP-FPM 最大并发进程数,具体取值取决于服务器可用内存以及单个 PHP 进程的平均占用,后文会讲计算方法。pm.start_servers = 5pm.min_spare_servers = 5pm.max_spare_servers = 35request_terminate_timeout = 30s—— 可根据业务接口的超时容忍度调整,主要目的是避免少量慢请求长期占用进程,拖慢整个 PHP-FPM 进程池。- 慢日志建议必须开启:
slowlog = /var/log/php-fpm/www-slow.log,request_slowlog_timeout = 10s,这对排查 PHP 性能瓶颈、定位慢接口非常重要。 - 状态页同样建议开启:
pm.status_path = /status,并配合 Nginx 做只读访问控制,便于实时监控 PHP-FPM 的运行状态。
在 Web 服务器层面,以 Nginx 为例,是否具备良好的并发承载能力同样非常关键:
worker_processes auto—— 一般会自动匹配 CPU 核心数,配置简单,性能也更稳定。- 在事件模块中,
events { worker_connections 1024; }—— 该值可以根据目标并发量以及系统文件描述符上限继续调高。 - 静态资源应尽量交给 Nginx 直接处理,避免进入 PHP。这样做能够明显减轻 PHP-FPM 压力,是提升高并发性能的基础手段之一。
PHP 运行时与缓存
回到 PHP 本身,OPcache 基本属于必须启用且必须调优的组件。它能够显著减少 PHP 脚本重复编译带来的性能损耗,从而提升请求处理速度和整体吞吐量。下面是一组常见的 OPcache 参考配置,你可以根据项目代码规模、部署环境和内存情况进行调整:
opcache.enable=1opcache.memory_consumption=128opcache.interned_strings_buffer=8opcache.max_accelerated_files=4000opcache.revalidate_freq=60—— 如果是开发环境,这个值可以适当调小,以便代码更新更快生效;生产环境通常可以适当调大。
除此之外,php.ini 中与内存、执行时间相关的几个核心参数,也需要结合业务实际进行合理设置:
memory_limit通常设置在 128M~256M 区间比较常见。设置过大容易造成内存紧张,设置过小则可能导致频繁触发垃圾回收,反而影响 PHP 并发性能。max_execution_time应根据业务脚本执行时长来定,30~300 秒是比较常见的范围。post_max_size和upload_max_filesize需要按上传场景设置,没有必要盲目给出过大的值,以免占用额外资源。
如果还想进一步提升性能和并发响应能力,可以考虑引入 APCu 作为用户态缓存,用于保存热点变量或中间计算结果,减少重复运算和数据库访问。对于计算密集型或长连接场景,Swoole、ReactPHP 这类异步或协程方案也值得深入评估,不过它们通常涉及框架兼容、部署方式和开发模式变化,落地前需要做好适配成本评估。
数据库与缓存层
很多 PHP 高并发瓶颈,最终都不是卡在 PHP 本身,而是落在数据库层。常见的数据库优化手段包括:为高频查询字段建立索引、重写低效 SQL、避免 N+1 查询、减少无意义的全表扫描等。当业务量继续增长时,读写分离和主从复制则是进一步分担数据库压力的常见方案。
不过,从提升响应速度和降低数据库压力的角度看,往往更直接有效的办法是引入 Redis 或 Memcached。它们可以承担热点数据缓存、Session 会话存储,甚至可以实现页面缓存或片段缓存。这样通常能快速降低数据库 QPS、缩短请求延迟,对提升 Ubuntu PHP 并发能力往往见效很快。
水平扩展与系统调优
当单机上的 PHP、Nginx、数据库和缓存都已经优化到较高水平,但依然无法满足业务流量需求时,就需要考虑水平扩展。常见做法是通过 Nginx 或 HAProxy 做负载均衡,把请求分发到多台后端应用服务器上,这是 PHP 网站和 Web 应用横向扩容的标准方案。
与此同时,操作系统底层的承载上限也需要同步提升,否则再好的应用层优化也会被系统资源限制拖住:
- 提高文件描述符上限:例如通过
ulimit -n 65535设置,并在 systemd 服务配置中同步调整LimitNOFILE。 - 优化 Linux 内核参数:如
fs.file-max、net.core.somaxconn等都可以适当上调(例如分别配置为 65535 和 4096),同时vm.swappiness也建议结合内存使用情况做优化。 - 不要忽视持续监控。借助 PHP-FPM 状态页与慢日志,再结合 Prometheus、Grafana 等监控系统,持续观察队列长度、进程利用率、慢请求数量等关键指标,才能为后续性能调优提供可靠依据。
快速计算与落地步骤
最后,一个非常实际的问题是:max_children 到底应该设置多大?这里有一个简单但实用的估算公式:
上限 ≈ 可用内存 / 单进程峰值内存
举例来说,如果服务器可用内存为 8GB,实测单个 PHP-FPM 进程峰值占用约 80MB,那么理论最大值大约可以到 100 左右。但从生产稳定性出发,更建议先从 50~70 这个区间开始,在压测过程中观察 PHP-FPM 状态页中的队列长度、进程忙闲比,以及慢日志表现,再逐步上调,避免出现 OOM、频繁切换或系统抖动等问题。
整体的 PHP 并发优化与落地实施,可以按照下面的步骤推进:
- 基线准备:启用并调优 OPcache,设置合理的 PHP-FPM 进程参数与超时策略,开启慢日志和状态页,同时做好 Nginx 静态资源分离。
- 压力测试:使用
ab、wrk或ghz等压测工具逐步施压,重点关注 RPS、P95/P99 延迟、请求排队长度、5xx 错误率,以及 CPU、内存、磁盘 I/O、连接数等系统资源指标。 - 迭代调参:根据压测结果,持续微调
max_children、min/max_spare、超时策略以及缓存配置。必要时可以拆分应用池,引入 Redis 缓存层,或者增加数据库读写分离。 - 持续观测:将监控面板、阈值告警和性能复盘流程固定下来,形成“压测→调参→观测→复盘”的优化闭环。只有持续迭代,Ubuntu 下 PHP 的高并发处理能力才能稳定提升。
