Ubuntu 环境下优化 ThinkPHP 响应速度
一 基础环境优化
- 开启并正确配置 OPcache(优先见效):安装扩展后,在对应的 php.ini(如:/etc/php/8.1/fpm/php.ini 与 /etc/php/8.1/cli/php.ini)启用并合理取值,能显著减少 PHP 编译与磁盘 I/O。
- 切换到 生产环境 并关闭调试:将 APP_DEBUG=false,避免每次请求解析配置、记录冗余日志与错误详情,减少响应体积与开销。
- 使用高效 Web 服务器并正确对接 PHP-FPM(Nginx 示例):通过 Unix Socket 通信、合理的 fastcgi 参数与静态资源处理,降低连接开销与排队。
- 若运行在 WSL2,务必启用 OPcache(含 CLI),可缓解重复编译与虚拟化层 I/O 带来的性能下降。
二 PHP FPM 与进程调优
- 进程管理建议:采用 pm=dynamic,按内存与并发目标设置 pm.max_children / pm.start_servers / pm.min_spare_servers / pm.max_spare_servers;结合 pm.max_requests 做周期性回收,避免内存泄漏累积。
- 请求与日志:按需调整 request_terminate_timeout、降低日志级别与输出,减少磁盘 I/O;开启 slowlog 与 request_slowlog_timeout 定位慢请求与慢函数。
- 典型思路:先估算单个 PHP 进程内存占用(常见范围 5–15MB),用“可用内存 / 单进程内存”得到 max_children 的上限,再结合并发目标微调 start / spare 参数。
三 ThinkPHP 框架层缓存与编译优化
- 生成配置与路由缓存:部署稳定后执行命令生成缓存,避免每次请求重复解析配置与路由。
- 类库映射与表字段缓存:生成 classmap 与 schema,减少自动加载与字段探测开销。
- 数据层与页面级缓存:开启 查询缓存、合理使用 Redis/Memcached 作为缓存后端;对实时性不强的页面启用 页面/模板缓存 或静态化。
四 数据库与网络层优化
- 索引与 SQL:为高频查询条件与关联字段建立合适索引,避免全表扫描;优化复杂查询、分页与联表,必要时引入读写分离与查询优化器提示。
- 连接与连接池:复用连接、减少握手开销;在更高并发场景可考虑数据库连接池或中间层优化。
- 传输与边缘:启用 Gzip 压缩、合并与压缩 CSS/JS、使用 CDN 托管静态资源,降低带宽与时延。
五 快速检查清单与示例配置
-
快速检查清单
- 生产模式:APP_DEBUG=false;OPcache 已启用(含 CLI 场景如 Artisan/命令行任务)。
- OPcache 关键项:opcache.enable=1、opcache.memory_consumption=128、opcache.max_accelerated_files=4000、opcache.revalidate_freq=60(按业务可调)。
- PHP-FPM:进程池参数匹配内存与并发;开启 slowlog 与 request_slowlog_timeout=5s;用 php-fpm status 观察排队与进程使用。
- Web 服务器:Nginx 使用 unix:/var/run/php/php8.1-fpm.sock;静态资源由 Nginx 直接返回;开启 gzip。
- 缓存:配置 Redis/Memcached 并在业务侧使用;页面/列表等命中率高的内容启用缓存。
- 框架缓存:执行 php think optimize:config / optimize:route / optimize:autoload / optimize:schema;新增/变更表结构后及时重建 schema。
-
示例配置
- OPcache(/etc/php/8.1/fpm/php.ini 与 cli/php.ini)
- zend_extension=opcache.so
- opcache.enable=1
- opcache.enable_cli=1
- opcache.memory_consumption=128
- opcache.interned_strings_buffer=8
- opcache.max_accelerated_files=4000
- opcache.revalidate_freq=60
- PHP-FPM 进程池(/etc/php/8.1/fpm/pool.d/www.conf,示例值,需按机器内存与压测调整)
- pm=dynamic
- pm.max_children=50
- pm.start_servers=5
- pm.min_spare_servers=5
- pm.max_spare_servers=35
- pm.max_requests=500
- slowlog=/var/log/php-fpm/www-slow.log
- request_slowlog_timeout=5s
- Nginx 片段(对接 PHP-FPM)
- location ~ .php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
- ThinkPHP6 缓存配置(config/cache.php)
- ‘default’ => env(‘cache.driver’, ‘redis’),
- ‘stores’ => [
‘redis’ => [
‘driver’ => ‘redis’,
‘host’ => env(‘cache.redis.host’, ‘127.0.0.1’),
‘port’ => env(‘cache.redis.port’, 6379),
‘password’ => env(‘cache.redis.password’, ‘’),
‘select’ => 0,
‘timeout’ => 0,
‘expire’ => 3600,
‘persistent’ => false,
‘prefix’ => ‘’,
],
]