Ubuntu 上用 PHP-FPM 提速的实操清单
一 基础准备与版本选择
- 选择并安装较新的稳定版 PHP 与 PHP-FPM(如 PHP 8.1/8.2),新版本通常包含性能改进与安全修复。
- 保持系统与扩展的定期更新,及时获得性能与安全补丁。
- 若使用 Nginx,优先采用 Unix Socket 与 FPM 通信,减少网络栈开销;确保 Nginx 与 FPM 运行用户与 socket 权限匹配,避免 502 错误。
- 启用 OPcache 作为第一步加速(见下一节示例配置)。
二 PHP-FPM 进程与通信优化
- 进程管理模式选择:
- static:启动时固定进程数,适合稳定高负载、低开销场景。
- dynamic:按需增减,适合流量波动,资源利用更均衡。
- ondemand:请求到来才创建进程,适合低频访问或资源紧张环境。
- 关键参数建议(示例为 dynamic,按服务器内存与实测微调):
- 计算上限:先估算单个 PHP 进程平均内存占用(如 30MB),可用内存的 80% 用于 FPM,则大致为:
- max_children ≈ 0.8 × 可用内存 ÷ 单进程内存(示例:2GB 可用、30MB/进程 ⇒ 约 50)。
- 示例:pm = dynamic;pm.max_children = 50;pm.start_servers = 5;pm.min_spare_servers = 3;pm.max_spare_servers = 10。
- 通信方式:优先使用 Unix Socket(如 listen = /var/run/php/php8.1-fpm.sock),并在 Nginx 中与之对应;确保 listen.owner / listen.group 与 Web 服务运行用户一致,避免权限问题。
- 稳定性与可观测性:开启 slowlog 与 request_slowlog_timeout(如 10s)定位慢请求;必要时设置 request_terminate_timeout;提升 文件描述符限制 避免上限瓶颈。
三 OPcache 与 PHP 运行时参数
- 启用并合理设置 OPcache(示例值,按应用规模调整):
- opcache.enable = 1
- opcache.memory_consumption = 128M(或 64M 起)
- opcache.interned_strings_buffer = 8
- opcache.max_accelerated_files = 4000(大型项目可适当增大)
- opcache.revalidate_freq = 60(开发环境可设更小以快速看到代码变更)
- 生产建议开启 opcache.save_comments = 1 以避免部分框架/工具注解被优化掉。
- 运行时参数(php.ini):根据应用与内存情况设置 memory_limit(如 128M–256M)、max_execution_time、post_max_size、upload_max_filesize 等,避免过严限制造成异常或频繁重试。
四 Web 服务器与全链路加速
- 使用 Nginx 处理静态资源并反向代理 PHP 请求,减少 Apache 在并发场景下的开销;启用 Gzip 压缩降低传输体积。
- 启用 Nginx FastCGI 缓存(如 fastcgi_cache)缓存动态页面片段或整页输出,显著降低 FPM 计算压力(注意缓存键与失效策略)。
- 对图片、CSS、JS 等静态资源使用 CDN,缩短用户首包时间并减轻源站负载。
- 数据库与后端优化:为高频查询加索引、简化复杂查询、使用 Redis/Memcached 做数据缓存;对耗时任务采用异步/消息队列(如 RabbitMQ/Redis)解耦。
五 监控 压测与迭代
- 暴露并观察 PHP-FPM 状态页:在 FPM 配置启用 pm.status_path = /status,在 Nginx 配置 location /fpm-status(仅内网访问),关注 active processes、max children、queue 等指标;若 active 经常接近 max_children,说明并发不足需上调或优化应用。
- 慢请求定位:通过 slowlog 与 request_slowlog_timeout 找出耗时函数/SQL;结合应用性能分析工具(如 XHProf/Blackfire)做瓶颈剖析。
- 系统层监控:使用 top/htop/strace 观察 CPU、内存、I/O 与系统调用;结合日志与监控指标持续迭代参数与代码。