Ubuntu上Laravel性能优化实操清单
一 基础运行环境优化
- 使用PHP-FPM + Nginx承载应用,优先选择HTTP/2与长连接;Nginx示例:
- 将请求统一转发到index.php:try_files $uri $uri/ /index.php?$query_string;
- 静态资源设置长期缓存:expires 30d; add_header Cache-Control “public”;
- 启用并正确配置OPcache(生产建议值):
- opcache.enable=1
- opcache.memory_consumption=128
- opcache.interned_strings_buffer=8
- opcache.max_accelerated_files=10000
- opcache.revalidate_freq=60
- 安装常用扩展:php-cli php-fpm php-mysql php-zip php-gd php-mbstring php-curl php-xml php-bcmath
- 前端资源使用Laravel Mix执行生产构建:npm run production,减少浏览器下载体积与请求数。
二 缓存与会话加速
- 使用Redis作为缓存与会话后端:
- 安装与启动:sudo apt install redis-server;sudo systemctl start redis
- 配置 .env:CACHE_DRIVER=redis;SESSION_DRIVER=redis
- Composer安装客户端:composer require predis/predis
- 应用层缓存策略:
- 配置缓存:php artisan config:cache;php artisan route:cache;php artisan view:cache
- 自动加载优化:composer dump-autoload --optimize
- 数据查询缓存:Cache::remember(‘key’, 600, fn() => Model::all())
- 页面/片段缓存:在控制器或 Blade 中使用 @cache 指令
- 队列异步化耗时任务(如邮件、导入、图片处理),降低请求耗时与峰值负载。
三 数据库与队列优化
- 数据库优化要点:
- 为高频查询字段建立索引,避免全表扫描
- 解决N+1问题:使用 Eloquent 的 with() 预加载关联
- 合理设置连接池(示例):DB_POOL=10(需与数据库连接配置匹配)
- 队列系统优化:
- 选择高性能驱动:QUEUE_CONNECTION=redis
- 启动多进程消费者并守护:php artisan queue:work --daemon --tries=3 --queue=high,default
- 使用Supervisor保活与集中日志管理(示例 numprocs=4)
- 监控与告警:使用 Laravel Horizon 观测队列吞吐、失败重试与延时。
四 常驻内存与并发提升 Laravel Octane
- 适用场景:追求高并发/低延迟的 API 或后台管理。
- 安装与启动:
- 安装扩展与包:sudo pecl install swoole;composer require laravel/octane
- 初始化并启动:php artisan octane:install --server=swoole;php artisan octane:start --workers=4 --task-workers=2
- Nginx代理示例:将 / 与 /index.php 转发到 127.0.0.1:8000(长连接、HTTP/1.1)
- 进程守护(Supervisor):
- command=php /var/www/app/artisan octane:start --server=swoole --host=0.0.0.0 --port=8000
- 关键调优:
- worker_num 建议为 CPU 核心数 × 2
- 设置 max_request(如 1000)定期回收进程,缓解内存泄漏风险
- 启动时预热共享缓存:Octane::cache(‘config’, fn() => config()->all())。
五 上线检查与监控
- 上线前执行:php artisan config:clear;php artisan route:clear;php artisan view:clear(避免开发态缓存污染)
- 监控与诊断:
- 生产不建议安装开发调试组件;如需排查可使用 Laravel Debugbar/Telescope(仅开发环境)
- 系统层面使用 htop/top 观察 CPU/内存,结合应用日志与队列面板定位瓶颈。