centos如何优化php运行速度
小樊
41
2025-11-29 16:50:58
CentOS 上优化 PHP 运行速度
一 基础环境优化
- 升级到受支持的 PHP 版本(如 PHP 8.x),新版本包含显著的性能改进与安全修复。
- 安装并启用 OPcache(字节码缓存),减少重复编译开销:
- 安装:sudo yum install php-opcache
- 配置示例(php.ini 的 [opcache] 段):
- opcache.enable=1
- opcache.memory_consumption=128
- opcache.interned_strings_buffer=8
- opcache.max_accelerated_files=4000
- opcache.revalidate_freq=60
- 精简 php.ini:关闭不必要的扩展(降低内存与启动开销),并优化基础参数:
- memory_limit=256M
- max_execution_time=30(按业务适当放宽)
- display_errors=Off,log_errors=On,error_log=/var/log/php_errors.log
- 可选安全项:disable_functions=exec,passthru,shell_exec,system
- 建议在生产环境使用 PHP-FPM(配合 Nginx/Apache),并通过包管理器安装:sudo yum install php-fpm。
二 PHP-FPM 进程与请求优化
- 编辑 /etc/php-fpm.d/www.conf(或对应版本路径),合理设置进程模型与数量:
- pm=dynamic(内存紧张或波动负载更友好)
- 计算 max_children 的保守公式:max_children ≈ (可用内存 − 系统/其他服务预留 1G) / 单个 PHP 进程平均内存(用监控与压测校准)
- 常用起步值:pm.start_servers=5,pm.min_spare_servers=5,pm.max_spare_servers=35
- 防止长请求拖垮:request_terminate_timeout=30s
- 稳定性与自恢复:pm.max_requests=500–1000(定期回收子进程,释放内存碎片)
- 打开慢日志定位瓶颈:
- slowlog=/var/log/php-fpm/slow.log
- request_slowlog_timeout=10s
- 监听与权限(示例为 Unix Socket,性能与权限控制更优):
- listen=/run/php/php{version}-fpm.sock(或 127.0.0.1:9000)
- listen.owner=www-data;listen.group=www-data;user=www-data;group=www-data
- 变更后重载:systemctl reload php-fpm(或 restart 视变更范围而定)。
三 Web 服务器与传输层优化
- Nginx 建议:
- 进程与连接:worker_processes auto;events { worker_connections 1024; }
- 启用压缩:gzip on;gzip_types 包含 text/plain、text/css、application/javascript、application/json 等
- 与 PHP-FPM 对接:fastcgi_pass unix:/run/php/php{version}-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params;
- Apache 建议:
- 启用压缩(mod_deflate)与 KeepAlive
- 使用 FPM 代理:FilesMatch .php$ { SetHandler “proxy:unix:/run/php-fpm/www.sock|fcgi://localhost” }
- 传输与边缘优化:启用 Gzip、配置合适的浏览器缓存策略、将静态资源托管到 CDN。
四 应用与数据层优化
- 引入数据缓存:对热点数据使用 Redis 或 Memcached,减少数据库压力与往返。
- 优化数据库:为高频查询建立 索引,避免全表扫描;用 EXPLAIN 分析慢查询并优化 SQL。
- 连接策略:在合适场景使用 持久连接(PDO/MySQLi),降低握手开销(注意连接池与空闲回收)。
- 代码与架构:减少循环内重复计算、优先使用内置函数、降低文件 I/O、采用高效算法与数据结构;将耗时任务改为 异步队列(如 RabbitMQ/Kafka)。
五 监控 压测与迭代
- 监控与日志:
- 系统层:top/htop、vmstat 观察 CPU/内存/IO
- PHP-FPM:慢日志(slowlog)定位耗时函数与调用链;关注 max_children 是否不足或过多
- 可视化:结合 Prometheus + Grafana 搭建指标看板,持续观察排队、响应时间与错误率
- 压测与容量评估:使用 ab/wrk/自定义脚本进行峰值与并发测试,依据结果回调 pm.max_children、超时与缓存策略。