- 首页 >
- 问答 >
-
编程语言 >
- PHP-FPM在Ubuntu上的优化策略是什么
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 = 5、pm.min_spare_servers = 5、pm.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=1、opcache.memory_consumption=128、opcache.interned_strings_buffer=8、opcache.max_accelerated_files=4000、opcache.revalidate_freq=60。
- 生产可开启 opcache.fast_shutdown=1 以加速请求收尾。
- 合理设置脚本边界:memory_limit = 128–256M(视应用而定)、max_execution_time = 30(与 FPM 超时协同)。
- 开发环境如需调试再启用 Xdebug,生产务必关闭以避免性能急剧下降。
三 请求与日志诊断
- 慢请求追踪:开启 slowlog 与 request_slowlog_timeout = 5–10s,定位耗时函数与慢 SQL。
- 子进程输出:开启 catch_workers_output = yes,便于捕获异常与调试信息。
- 日志级别:生产将 PHP-FPM 日志级别调至 warning/error,降低磁盘 I/O 压力。
- 状态页与监控:启用 pm.status_path(如 /status),配合 Nginx 访问控制,使用 htop/top、php-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.conf 与 php.ini)。
- 只启用必需扩展,设置 pm、OPcache、内存与超时 的基线值。
- 打开 slowlog 与 status,先以保守参数上线并观察 24–48 小时。
- 依据监控数据逐步调大 max_children / spare_servers 或优化慢请求,再滚动重启生效。