总体结论与优先级 在 Ubuntu 上,ThinkPHP 的性能瓶颈通常集中在:运行时的 PHP 字节码缓存未启用、数据库查询与索引缺失、Web 服务器与 PHP-FPM 配置不当、路由与调试模式开销、以及 文件系统与网络 I/O。其中,未启用 OPcache、缺少索引/慢查询、以及错误的 Nginx/PHP-FPM 进程与连接配置,最常见且影响最大。
常见瓶颈与现象对照表
| 瓶颈点 | 典型现象 | 快速自检 | 优先优化 |
|---|---|---|---|
| OPcache 未启用/配置不当 | 首次访问明显慢,重复访问无改善 | `php -i | grep opcache查看opcache.enable => Off` |
| 数据库查询/索引问题 | 列表页、搜索页慢,数据库 CPU 高 | 开启慢查询日志,EXPLAIN 关键 SQL | 增加合适索引、优化 SQL、引入查询缓存 |
| PHP-FPM 进程与连接瓶颈 | 高峰期 502/504,RPS 上不去 | systemctl status php*-fpm;观察进程数、排队 |
调整 pm.max_children、pm.start_servers、pm.max_requests,优化 listen.backlog 与 FPM 超时 |
| Nginx 路由/重写配置不当 | 路由 404/白屏,PATH_INFO 失效 | 访问 /index.php?s=... 正常,美化 URL 失败 |
配置 try_files $uri $uri/ /index.php?$query_string;,正确启用 PATH_INFO |
| 调试模式/开发配置残留 | 日志量大、缓存频繁失效 | 检查 APP_DEBUG 或环境配置 |
生产环境关闭调试,启用配置/路由缓存 |
| 文件 I/O 与日志 | 日志、上传、模板读取慢 | iostat -x 1,观察 %util |
将日志/上传分离到独立磁盘,减少同步写入 |
| 网络与反向代理 | 外部 API/微服务调用拖慢响应 | 链路追踪/日志统计外部耗时 | 加缓存、超时与熔断、合并请求/异步化 |
| WSL2 特有(如适用) | 本机开发环境明显慢于原生 Linux | 在 WSL2 内执行 `php -i | grep opcache` |
| 上述要点与现象在 Ubuntu 部署、ThinkPHP 官方与社区实践中均被反复验证,其中对 OPcache、数据库与缓存、Nginx/PHP-FPM 配置、以及 PATH_INFO 的支持是首要排查项。 |
定位与优化步骤
ab -n 1000 -c 100 http://localhost:8000/api/test,观察 RPS、95/99 延迟、失败率,再逐项优化并复测对比。php -i | grep opcache 确认 opcache.enable => On,根据内存与文件量调整 memory_consumption、max_accelerated_files、revalidate_freq。unix:/var/run/php/php7.4-fpm.sock;),并按 ThinkPHP 要求配置 try_files 与 PATH_INFO。环境与配置检查清单
php -v、php -m 确认 PHP 版本与必要扩展(如 php-fpm、pdo_mysql、mbstring、xml、curl)已安装并启用。try_files $uri $uri/ /index.php?$query_string; 存在;如使用 PATH_INFO,按官方示例正确设置 fastcgi_split_path_info 与 PATH_INFO 参数,避免路由解析退化。php -i | grep opcache 确认启用与参数生效,避免因配置未加载导致“假启用”。