Ubuntu上优化 ThinkPHP 代码与运行环境的实用清单
一 基础运行环境优化
- 开启并正确配置 OPcache(PHP 字节码缓存),建议值:opcache.enable=1、opcache.memory_consumption=128–256M、opcache.max_accelerated_files=4000–10000、opcache.revalidate_freq=60(生产环境可更大以减少校验)。重启 PHP-FPM 生效。
- 调整 PHP-FPM 进程模型(pm)与请求上限:根据内存与单进程占用估算 pm.max_children,避免内存耗尽;设置 pm.max_requests 定期重启进程回收内存泄漏;合理设置 request_terminate_timeout 与慢日志以定位异常。
- 使用 Nginx 直接服务静态资源并开启压缩与长缓存;通过 try_files 将所有非静态请求转发到 index.php 实现优雅 URL;屏蔽敏感文件访问(如 .env、runtime、vendor)。
- 保持 PHP 与 ThinkPHP 为较新稳定版本,及时获得性能修复与优化。
二 框架与代码层优化
- 关闭调试:生产环境将 APP_DEBUG=false(或 .env 中 APP_DEBUG=false),减少日志与额外检查开销。
- 生成框架运行缓存:执行命令 php think optimize:route、php think optimize:config、php think optimize:schema,减少路由注册、配置读取与表结构反射开销。
- 优化数据访问:使用模型关联预加载 with/withJoin 解决 N+1;大数据集用 chunk/cursor 降低内存;对热点数据使用 cache() 或查询缓存并设置合理 TTL。
- 减少 I/O 与依赖:精简 Composer 依赖并优化自动加载(composer dump-autoload -o);避免循环内查询与重复计算;必要时采用单例/依赖注入管理对象生命周期。
三 缓存与数据库优化
- 构建多级缓存:优先使用 Redis/Memcached 作为数据/会话/配置缓存,本地文件缓存兜底;热点数据可预热(定时任务或启动时加载)。
- 会话集中化:将 Session 存入 Redis,便于横向扩展与一致性管理。
- 索引与 SQL:为 WHERE/JOIN/ORDER BY 字段建立合适索引;用 EXPLAIN 分析慢查询;避免 SELECT *;批量操作替代逐条执行。
- 连接与并发:长生命周期进程(如 Swoole)可启用数据库连接池;传统 FPM 场景关注最大连接数与数据库承载能力,必要时引入读写分离/从库。
四 前端与传输层优化
- 静态资源分离:由 Nginx 直接托管 CSS/JS/图片,开启 Gzip 压缩与 Cache-Control/Expires 长缓存;使用 CDN 加速与回源优化。
- 减少请求与体积:合并/压缩前端资源,使用雪碧图/字体图标,启用 HTTP/2 或 HTTP/3 提升并发加载能力。
五 部署与监控建议
- 进程与内存:依据物理内存与单进程 RSS 精确设定 pm.max_children,避免 SWAP;必要时启用 pm.max_requests 自动回收。
- 安全与合规:禁止访问 .env 与敏感目录;仅暴露 public 入口;启用 HTTPS。
- 监控与剖析:开启 PHP-FPM 慢日志 与 Nginx 访问/错误日志;使用 Xdebug/Blackfire 定位性能瓶颈并回归验证。
- 扩展场景:高并发/长连接业务可考虑 Swoole 协程与常驻内存模型,结合连接池与消息队列提升吞吐与稳定性。