温馨提示×

centos lnmp如何优化PHP

小樊
40
2025-12-17 17:34:10
栏目: 编程语言

CentOS LNMP 环境下优化 PHP 的实用步骤

一 基础与 OPcache 优化

  • 保持 PHP 版本为最新稳定版,及时获得性能修复与安全改进。
  • 启用并正确配置 OPcache(建议在生产环境开启):
    • 安装扩展:在 CentOS 上通常为 php-opcache 包。
    • 关键参数示例:
      • opcache.enable=1
      • opcache.memory_consumption=128–256(单位 MB,按内存与站点数量调整)
      • opcache.interned_strings_buffer=8–16
      • opcache.max_accelerated_files=20000(或 4000–40000,视代码规模)
      • 开发环境:opcache.validate_timestamps=1、revalidate_freq=60;生产环境:validate_timestamps=0(配合部署流程刷新)
  • 调整 php.ini 常用项:
    • memory_limit=128–256M(依据应用实际对象与框架占用调整)
    • max_execution_time=30–60(长任务建议异步化)
    • upload_max_filesize / post_max_size(按业务需求设置,避免过大)
    • date.timezone=Asia/Shanghai
  • 修改后验证并重启:
    • 查找 php.ini:运行 php --ini;编辑后重启 php-fpm(Nginx+PHP 场景)。

二 PHP-FPM 进程与超时调优

  • 进程模型与数量:
    • 模式优先用 pm=dynamic(按需伸缩);内存充足且追求稳定峰值可用 pm=static
    • 核心公式与约束:
      • 估算每个子进程 RSS(常驻内存)≈ 应用实测值(如 30–70MB)。
      • 最大子进程数上限:pm.max_children ≤ 可用内存 / 单个进程 RSS。
      • 经验估算(保守):在 1GB 内存、单进程 30MB RSS 时,max_children 约 10–20;在 2GB 内存、单进程 60MB RSS 时,max_children 约 16–32
      • 动态模式建议:start_servers 接近 min_spare_servers;max_spare_servers 略小于 max_children。
  • 超时与回收:
    • request_terminate_timeout=30s(生产常用;0 表示不主动终止,需配合 max_execution_time)。
    • pm.max_requests=1000–5000(周期性回收,缓解内存碎片与泄漏影响)。
  • 日志与排障:
    • 开启 slowlog 与 request_slowlog_timeout=1–5s,定位耗时函数与 SQL。
    • 开启 error_log,便于 FPM 层告警与问题追踪。

三 与 Nginx 协同与系统层面优化

  • FastCGI 与网关超时:
    • fastcgi_buffers 8 16k;fastcgi_buffer_size 32k(按并发与响应头大小微调)。
    • fastcgi_read_timeout 300s(需与 PHP-FPM 的 request_terminate_timeout、max_execution_time 协调)。
  • 并发与文件句柄:
    • 提升系统 文件描述符限制(如 ulimit -n / systemd 服务 LimitNOFILE),避免 “Too many open files”。
    • Nginx 侧可按 CPU 核心数设置 worker_processes,并适度提升 worker_connections;启用 gzip 压缩减少传输体积。
  • 资源与稳定性:
    • 使用 SSD、合理设置 vm.swappiness,降低磁盘抖动与交换。
    • 监控与日志:结合 Prometheus + Grafana 监控 PHP-FPM 队列、进程数、响应时间;定期分析 Nginx/PHP-FPM 错误与慢日志。

四 快速落地清单与示例配置

  • 快速清单
    1. 升级到最新 PHP 稳定版;2) 启用并调优 OPcache;3) 按内存与负载计算并设置 pm.max_children;4) 配置 slowlogerror_log;5) 与 Nginx 对齐超时;6) 提升 文件描述符 与内核参数;7) 接入 监控/告警;8) 变更前备份,变更后灰度与压测。
  • 示例配置(示例值,需按实际压测微调)
    • php.ini(片段)
      • opcache.enable=1
      • opcache.memory_consumption=192
      • opcache.interned_strings_buffer=16
      • opcache.max_accelerated_files=20000
      • opcache.validate_timestamps=0
      • memory_limit=192M
      • max_execution_time=30
      • upload_max_filesize=20M;post_max_size=20M
      • date.timezone=Asia/Shanghai
    • PHP-FPM www.conf(片段)
      • pm=dynamic
      • pm.max_children=32
      • pm.start_servers=8;pm.min_spare_servers=8;pm.max_spare_servers=24
      • pm.max_requests=2000
      • request_slowlog_timeout=1s;slowlog=/var/log/php-fpm/www-slow.log
      • rlimit_files=65535
    • Nginx 与 PHP-FPM 通信(片段)
      • fastcgi_buffers 8 16k;fastcgi_buffer_size 32k
      • fastcgi_read_timeout 300s
  • 验证与重启
    • 确认配置路径:运行 php --ini
    • 重启服务:systemctl restart php-fpm(必要时重启 nginx)。

0