Laravel在Linux服务器上如何优化性能
小樊
35
2025-12-24 06:15:44
Linux 上 Laravel 性能优化实操清单
一 服务器与内核
- 使用高性能 Web 服务器(如 Nginx)并正确指向 Laravel 的 public 目录;启用 HTTP/2 提升并发与资源加载速度。
- 调整 PHP-FPM 与进程模型(如动态/静态子进程、最大子进程数、请求超时),与 Nginx 通过 Unix Socket 通信以降低开销。
- 提升系统网络与文件描述符能力:增大 net.core.somaxconn、net.ipv4.tcp_max_syn_backlog,提高 ulimit -n(如 655360),并优化 TIME_WAIT(如开启 tcp_tw_reuse、调整 tcp_fin_timeout、扩大 ip_local_port_range)。
- 启用 OPcache 并合理设置内存、最大加速文件数、校验频率等,显著减少 PHP 脚本编译开销。
二 PHP 与 OPcache 关键配置
- 生产环境务必开启 opcache.enable=1,建议开启 opcache.enable_cli=1(仅限 CLI 场景需要);根据项目规模调整:
- opcache.memory_consumption(如 128–528 MB)
- opcache.max_accelerated_files(如 10000+)
- opcache.validate_timestamps(生产建议 60 秒或关闭并用部署流程重载 FPM)
- opcache.revalidate_freq(与 validate_timestamps 配合,生产可 0 或 60)
- 精简无用扩展,使用最新稳定版 PHP(如 PHP 8.x),并合理设置 memory_limit。
三 Laravel 框架与应用层
- 配置与路由缓存:执行 php artisan config:cache、php artisan route:cache;视图可预热 php artisan view:cache。
- 使用高性能缓存与会话驱动(如 Redis):设置 CACHE_DRIVER=redis、SESSION_DRIVER=redis。
- 数据库优化:为高频查询字段建立索引;使用 Eager Loading 解决 N+1;大数据列表采用 分页;必要时使用查询缓存。
- 将耗时任务放入队列(如 Redis 驱动)异步处理,保持接口快速响应。
- 前端与传输:用 Laravel Mix 合并压缩 CSS/JS;启用 Gzip;静态资源使用 CDN 加速。
四 队列与异步任务
- 选择 Redis 作为队列驱动(配置 QUEUE_CONNECTION=redis),为任务设置合理超时与重试:
- 任务级:public $timeout = 60;、public $tries = 3;、public $backoff = 10;
- 队列级:如 retry_after=90(确保长于任务最大执行时间)。
- 进程管理:使用 Supervisor 守护队列进程,示例:
- numprocs 依据 CPU 与负载调整(如 8);命令如:
php artisan queue:work redis --sleep=3 --tries=3 --timeout=60
- 可靠性:启用失败队列(如 failed_jobs 表),监控与重试失败任务;高并发/可视化监控可用 Horizon。
五 监控、压测与进阶
- 监控与分析:开发环境可用 Laravel Debugbar 定位慢查询与 N+1;生产建议接入 New Relic/Datadog 做 APM 与链路追踪。
- 压测与容量:使用 ab/wrk/siege 进行基线压测,结合监控逐步调优 PHP-FPM 进程数、OPcache、数据库索引/连接池、队列并发 等关键参数。
- 进阶方案:对长生命周期进程与极低冷启动需求,可考虑 Laravel Octane(基于 Swoole/RoadRunner)进一步降低请求开销。