Debian上提升 Laravel 应用速度的系统化做法
一 基础与框架层优化
- 将应用切到生产环境并关闭调试:设置 APP_ENV=production、APP_DEBUG=false。
- 缓存框架引导产物:执行 php artisan config:cache、php artisan route:cache、php artisan view:cache(开发环境勿启用)。
- 优化自动加载:部署时执行 composer install --optimize-autoloader --no-dev。
- 使用高性能缓存与会话驱动:在 .env 设置 CACHE_DRIVER=redis、SESSION_DRIVER=redis,并在 config/cache.php 配置 Redis 连接。
- 数据层优化:为高频查询字段添加数据库索引;使用 Eloquent 的 with() 预加载避免 N+1;对大数据量使用分页;对热点数据用 Cache::remember() 做查询缓存。
- 异步任务:将耗时任务(邮件、导出、图片处理等)放入队列,使用 QUEUE_CONNECTION=redis 并配合 Supervisor 常驻 php artisan queue:work(或 Horizon)。
二 PHP 运行时与 Web 服务优化
- 启用并调优 OPcache(CLI 与 FPM 均建议开启):
- 关键参数示例:opcache.enable=1、opcache.enable_cli=1、opcache.jit=tracing、opcache.jit_buffer_size=256M、opcache.memory_consumption=512M、opcache.max_accelerated_files=10000、opcache.revalidate_freq=60。
- PHP-FPM 进程管理(/etc/php/*/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;按内存与负载逐步压测调优。
- Nginx 建议:启用 HTTP/2、开启 Gzip、为静态资源设置长期 Cache-Control(如 expires 30d; add_header Cache-Control “public”),PHP 请求走 fastcgi_pass unix:/var/run/php/phpX.Y-fpm.sock。
- 可选的高性能应用服务器:使用 Laravel Octane(如 FrankenPHP/Swoole/RoadRunner)承载长生命周期进程,减少请求初始化开销;按需配置 OCTANE_HTTPS、max_execution_time 等。
三 数据库与连接优化
- 升级到最新稳定版 MySQL/PostgreSQL,并针对工作负载调参:
- MySQL 示例:innodb_buffer_pool_size≈系统内存的70%、innodb_log_file_size=256M、innodb_flush_log_at_trx_commit=2。
- PostgreSQL 示例:shared_buffers≈25%内存、work_mem=4MB、effective_cache_size≈75%内存。
- 连接与会话:合理设置 wait_timeout/interactive_timeout;在极端并发场景可考虑 持久连接(需评估连接争用)。
- 索引与查询:用 EXPLAIN 分析慢查询;避免 **SELECT ***;为 WHERE、JOIN、ORDER BY 字段建立合适索引;用 Eager Loading 解决 N+1。
- 连接治理:高并发可考虑数据库连接池(如 PgBouncer for PostgreSQL、ProxySQL for MySQL)降低握手与销毁开销。
四 系统与网络层优化
- 提升文件描述符限制:在 /etc/security/limits.conf 设置如 * soft nofile 65535、* hard nofile 65535,并在服务环境应用(如 systemd 服务设置 LimitNOFILE=65535)。
- TCP/IP 与内核网络参数(/etc/sysctl.conf):
- 示例:net.core.somaxconn=262144、net.core.netdev_max_backlog=262144、net.ipv4.tcp_max_syn_backlog=262144、net.ipv4.tcp_tw_reuse=1、net.ipv4.tcp_fin_timeout=30,执行 sysctl -p 生效。
- 传输与边缘:启用 HTTP/2;静态资源使用 CDN 与浏览器缓存策略,降低源站压力与首包时间。
五 监控 压测与迭代
- 性能剖析与监控:开发/预发环境接入 Laravel Telescope(安装、迁移、按需忽略迁移与生产环境限制),配合 Laravel Debugbar 定位慢查询与慢请求;生产环境谨慎开启以免影响性能。
- 队列与后台任务:使用 Horizon 统一监控与伸缩队列工作者,确保重试与超时策略合理。
- 压测与容量规划:以真实业务场景进行压测(如逐步增加并发、观察 RPS/延迟/错误率),结合 OPcache 命中率、FPM 进程占用、数据库连接数、慢查询日志 等指标迭代参数。