温馨提示×

linux laravel怎样优化性能

小樊
49
2026-10-07 03:16:59
栏目: 智能运维

在 Linux 环境下优化 Laravel 性能,可以从 PHP、Laravel 自身、数据库、服务器、缓存、运维 多个层面来做。下面是一套比较系统的优化方案(按重要性排序)。


一、Laravel 自身优化(必做)

1. 关闭开发模式

APP_ENV=production
APP_DEBUG=false

2. 配置缓存(非常重要)

php artisan config:cache
php artisan route:cache
php artisan view:cache
php artisan event:cache

部署后代码变更一定要重新执行 cache 命令

3. 自动加载优化

composer install --optimize-autoloader --no-dev
composer dump-autoload -o

4. 使用 OPcache(强烈推荐)

; php.ini
opcache.enable=1
opcache.memory_consumption=256
opcache.max_accelerated_files=20000
opcache.validate_timestamps=0  ; 生产环境
opcache.revalidate_freq=60

二、Web 服务器优化(Linux)

1. 使用 Nginx + PHP-FPM(比 Apache 快)

# nginx.conf
worker_processes auto;
worker_connections 10240;

fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;

2. PHP-FPM 调优

pm = dynamic
pm.max_children = 100
pm.start_servers = 20
pm.min_spare_servers = 10
pm.max_spare_servers = 30

3. 开启 Gzip

gzip on;
gzip_types text/css application/javascript application/json;

三、数据库优化(Laravel 常见瓶颈)

1. 开启查询缓存 / 慢查询日志

slow_query_log = 1
long_query_time = 1

2. 使用索引 & 避免 N+1

// ❌ 错误
$users = User::all();
foreach ($users as $user) {
    $user->posts;
}

// ✅ 正确
$users = User::with('posts')->get();

3. 使用 Redis 作为缓存 & Session

CACHE_DRIVER=redis
SESSION_DRIVER=redis
QUEUE_CONNECTION=redis

四、缓存与队列(关键性能提升)

1. 使用 Redis

sudo apt install redis-server
REDIS_HOST=127.0.0.1
REDIS_PORT=6379

2. 队列异步处理

php artisan queue:work --daemon

使用 Supervisor 管理队列:

[program:laravel-worker]
command=php /var/www/artisan queue:work --daemon
autostart=true
autorestart=true

五、静态资源优化

1. 前端资源编译

npm run build

2. CDN(可选)

  • js/css/img 放 CDN
  • Nginx 开启缓存
location ~* \.(js|css|png|jpg)$ {
    expires 30d;
}

六、Linux 系统级优化

1. 文件描述符

ulimit -n 65535

2. TCP 优化

sysctl -w net.core.somaxconn=65535

3. 使用 SSD & 足够内存


七、监控与排查工具

  • php artisan route:list(路由数量)
  • debugbar(开发)
  • Blackfire / Tideways(性能分析)
  • htop, iostat, vmstat

八、性能优化优先级建议

✅ 立竿见影

  • OPcache
  • config/route/view cache
  • Redis
  • Nginx + PHP-FPM

✅ 中期

  • 数据库索引
  • 队列
  • 减少 N+1

✅ 长期

  • 架构拆分
  • 微服务
  • 读写分离

如果你愿意,可以告诉我:

  • Laravel 版本
  • 并发量(QPS)
  • 当前服务器配置
  • 是否用了 Docker

我可以给你一套针对性的优化方案。

0 踩