温馨提示×

Debian系统Laravel项目怎么优化

小樊
34
2026-01-03 16:09:09
栏目: 智能运维

Debian 上 Laravel 项目性能优化实操清单

一 系统层优化

  • 提升文件描述符与网络并发
    • /etc/security/limits.conf 增加:
      • * soft nofile 65535
      • * hard nofile 65535
    • /etc/sysctl.conf 调整:
      • net.core.somaxconn = 65535
      • net.ipv4.tcp_max_syn_backlog = 65535
      • net.ipv4.ip_local_port_range = 1024 65535
      • net.ipv4.tcp_tw_reuse = 1
      • net.ipv4.tcp_fin_timeout = 30
    • 执行 sysctl -p 使内核参数生效。
  • Web 与进程模型
    • 使用 Nginx + PHP-FPM,为 PHP-FPM 设置合理的进程模型与数量(示例为 PHP 7.4,请按实际版本调整路径与参数):
      • /etc/php/7.4/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
        • listen = /run/php/php7.4-fpm.sock
      • 重启:systemctl restart php7.4-fpm
    • 静态资源开启 Gzip/Brotli,Nginx 示例:
      • gzip on; gzip_vary on; gzip_types text/plain text/css application/json application/javascript text/xml application/xml;
  • 数据库基础
    • 使用 InnoDB,并合理设置缓冲与连接:
      • innodb_buffer_pool_size = 1G
      • innodb_log_file_size = 256M
      • max_connections = 200
    • 连接开销大的场景可引入 ProxySQL(MySQL)/PgBouncer(PostgreSQL) 做连接池。

二 PHP 与 Laravel 运行时优化

  • 启用并调优 OPcache(生产建议同时开启 CLI,便于 Artisan/队列等 CLI 任务受益):
    • opcache.enable=1
    • opcache.enable_cli=1
    • opcache.memory_consumption=512M
    • opcache.interned_strings_buffer=64M
    • opcache.max_accelerated_files=10000
    • opcache.revalidate_freq=60
    • opcache.validate_timestamps=0(生产建议关闭,变更代码时再临时开启)
    • opcache.jit=1(PHP 8+,如支持)
    • opcache.jit_buffer_size=256M
    • 重启 PHP-FPM 生效。
  • 配置与路由缓存(仅生产)
    • php artisan config:cache
    • php artisan route:cache
    • 视图片段可用 Blade 缓存或 Artisan 视图缓存。
  • 使用高性能应用服务器 Laravel Octane(FrankenPHP/Swoole/RoadRunner)
    • 安装:composer require laravel/octane
    • 初始化:php artisan octane:install --server=frankenphp
    • 启动:php artisan octane:start
    • 反向代理(Nginx)示例:
      • fastcgi_pass 127.0.0.1:9000;(Octane/FrankenPHP 监听端口)
  • 缓存与会话驱动
    • .envCACHE_DRIVER=redisSESSION_DRIVER=redis
    • config/cache.php 使用 Redis Store。
  • 队列与异步
    • .envQUEUE_CONNECTION=redis
    • 耗时任务(邮件、导出、图片处理等)一律 dispatch() 入队。

三 数据库与队列优化

  • 查询与索引
    • 避免 N+1:使用 with('relation') 预加载;只查需要的字段 select('id','name');为高频查询字段建立 索引;用 EXPLAIN 分析慢查询。
  • 连接与连接池
    • 合理设置数据库连接数;高并发/短连接场景引入 ProxySQL/PgBouncer 降低握手与连接开销。
  • 队列并发与可靠性
    • 使用 Supervisor 管理队列进程,确保崩溃自动重启与并发处理:
      • 安装:sudo apt-get install supervisor
      • 配置 /etc/supervisor/conf.d/laravel-worker.conf
        [program:laravel-worker]
        process_name=%(program_name)s_%(process_num)02d
        command=php /var/www/laravel/artisan queue:work redis --sleep=3 --tries=3 --queue=high,default
        autostart=true
        autorestart=true
        user=www-data
        numprocs=4
        redirect_stderr=true
        stdout_logfile=/var/www/laravel/storage/logs/worker.log
        
      • 生效:supervisorctl reread && supervisorctl update && supervisorctl start laravel-worker:*
    • 按业务划分队列(如 high,default,low),优先消费高优队列。

四 前端与网络层优化

  • 资源构建与版本化
    • 使用 Laravel Mix 编译与压缩资源,并启用版本控制避免缓存问题:
      • mix.js('resources/js/app.js','public/js').sass('resources/sass/app.scss','public/css').version();
  • 传输与分发
    • 开启 Gzip/Brotli;将图片、JS、CSS 等静态资源托管到 CDN;设置合适的 Cache-Control/ETag
  • HTTP 缓存策略
    • 对不常变页面/接口使用页面/响应缓存;对 API 使用 ETag/Last-ModifiedCache-Control: max-age

五 监控 部署与扩展

  • 监控与剖析
    • 生产排查可用 Laravel Telescope(仅开发/内测环境)、Blackfire 做性能剖析;线上建议接入 New Relic/Datadog 做 APM 与告警。
  • 日志与存储
    • 合理设置日志级别与保留策略,避免日志过大影响磁盘与 I/O;关键业务日志单独落盘并定期归档。
  • 自动化与发布
    • 使用 Git + Jenkins/GitLab CI 实现自动化测试与部署;发布前执行 composer install --optimize-autoloader --no-dev,必要时清缓存后再平滑切换。
  • 扩展与高可用
    • 前端接入 Nginx/HAProxy 做负载均衡;后端无状态化扩展多实例;数据库读写分离/分库分表按需推进。

0