温馨提示×

PHP-FPM在Ubuntu上的优化策略是什么

小樊
32
2025-12-14 12:53:24
栏目: 编程语言

PHP-FPM 在 Ubuntu 的优化策略

一 进程管理与资源配置

  • 选择进程管理模式:优先使用 pm = dynamic(负载波动场景);稳定高并发且资源充足时可用 static;低并发或节省内存的短时任务可用 ondemand
  • 计算并发上限:先测算单个 PHP 子进程的内存占用(常见范围 5–15MB,以实际测量为准),再按公式估算 pm.max_children ≈ 可用内存 / 单进程内存,并预留系统与其他服务内存。
  • 动态池常用基线:例如 pm.start_servers = 5pm.min_spare_servers = 5pm.max_spare_servers = 35;可按并发峰值与内存容量微调。
  • 进程回收与健康:设置 pm.max_requests = 500–1000,定期回收进程以抑制内存泄漏累积。
  • 请求边界:根据业务设置 request_terminate_timeout = 30s(应与业务超时一致,避免过早中断长任务)。
  • 资源限制:必要时提升 rlimit_files(如 1024 或更高),避免“Too many open files”。

二 PHP 运行时与字节码缓存

  • 启用并优化 OPcache(php.ini):
    • 建议值:opcache.enable=1opcache.memory_consumption=128opcache.interned_strings_buffer=8opcache.max_accelerated_files=4000opcache.revalidate_freq=60
    • 生产可开启 opcache.fast_shutdown=1 以加速请求收尾。
  • 合理设置脚本边界:memory_limit = 128–256M(视应用而定)、max_execution_time = 30(与 FPM 超时协同)。
  • 开发环境如需调试再启用 Xdebug,生产务必关闭以避免性能急剧下降。

三 请求与日志诊断

  • 慢请求追踪:开启 slowlogrequest_slowlog_timeout = 5–10s,定位耗时函数与慢 SQL。
  • 子进程输出:开启 catch_workers_output = yes,便于捕获异常与调试信息。
  • 日志级别:生产将 PHP-FPM 日志级别调至 warning/error,降低磁盘 I/O 压力。
  • 状态页与监控:启用 pm.status_path(如 /status),配合 Nginx 访问控制,使用 htop/topphp-fpm status 观察 active/queued 等指标并滚动调参。

四 与 Web 服务器集成与网络

  • Unix 套接字优先:Nginx 使用 fastcgi_pass unix:/run/php/php{version}-fpm.sock;,减少网络栈开销;路径随 PHP 版本变化(如 /run/php/php7.4-fpm.sock)。
  • 按需使用 TCP:也可 fastcgi_pass 127.0.0.1:9000;若使用 TCP,建议设置 listen.allowed_clients = 127.0.0.1 限制来源。
  • 变更生效:配置调整后执行 sudo systemctl reload php{version}-fpm(平滑)或 restart(重启)。

五 系统层面与上线检查

  • 监控与容量规划:持续使用 top/htop、vmstat、iostat 观察 CPU、内存、I/O,结合 php-fpm status 的队列与进程数联动扩缩。
  • 精简扩展与依赖:生产禁用不必要的扩展(尤其是 Xdebug),减少初始化与运行时开销。
  • 可选优化:对内存占用大的服务可考虑启用 Huge Pages(需评估与应用兼容性)。
  • 上线清单:
    • 备份原始配置(如 /etc/php/{version}/fpm/pool.d/www.confphp.ini)。
    • 只启用必需扩展,设置 pm、OPcache、内存与超时 的基线值。
    • 打开 slowlogstatus,先以保守参数上线并观察 24–48 小时
    • 依据监控数据逐步调大 max_children / spare_servers 或优化慢请求,再滚动重启生效。

0