温馨提示×

Laravel在Ubuntu中如何优化性能

小樊
46
2025-12-06 17:23:46
栏目: 智能运维

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/内存,结合应用日志与队列面板定位瓶颈。

0