温馨提示×

Laravel在Ubuntu中运行缓慢怎么办

小樊
42
2025-12-20 14:11:23
栏目: 智能运维

Ubuntu 上提升 Laravel 性能的实操清单

一 基础环境优化

  • 启用并正确配置 PHP-FPM:安装对应版本(如 sudo apt install php-fpm),在 /etc/php/{version}/fpm/pool.d/www.conf 中设置运行用户为 www-data,按需调整进程模型与数量(见下文),修改后执行 sudo systemctl restart php{version}-fpm
  • 配置 Nginx 代理 PHP:在站点配置中确保 location ~ .php$ 使用 fastcgi_pass unix:/run/php/php{version}-fpm.sock;,并设置 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;,测试配置 sudo nginx -t 后重载 sudo systemctl reload nginx
  • 启用 OPcache(生产环境强烈建议):在 php.ini 中开启 opcache.enable=1,设置 opcache.memory_consumption=256,生产环境关闭时间戳检查 opcache.validate_timestamps=0,重启 PHP-FPM 生效。
  • 应用环境:将 .envAPP_ENV=productionAPP_DEBUG=false,避免调试开销。

二 PHP-FPM 与进程调优

  • 进程模型选择:
    • static:适合稳定高并发,设置 pm = static,将 pm.max_children 设为约 CPU 核心数 × 4(需结合内存与实测微调)。
    • dynamic:适合流量波动,设置 pm.start_servers / pm.min_spare_servers / pm.max_spare_servers 以平滑应对峰值。
  • 稳定性设置:将 pm.max_requests 设为 500~1000,定期回收进程,缓解潜在内存泄漏影响。
  • 重载生效:每次修改 pool.d/www.conf 后执行 sudo systemctl restart php{version}-fpm

三 Laravel 应用层优化

  • 配置与路由缓存:执行 php artisan config:cachephp artisan route:cachephp artisan view:cache,减少文件 I/O 与解析开销。
  • Composer 优化:执行 composer dump-autoload --optimize,优化类映射加载。
  • 缓存驱动:将 CACHE_DRIVER=redisSESSION_DRIVER=redis,提升缓存读写性能。
  • 队列异步:将耗时任务(邮件、导入等)放入队列,配置 QUEUE_CONNECTION=redis 并启动 php artisan queue:work --daemon
  • 查询优化:避免 N+1,使用 with() 预加载;大数据列表使用 分页;必要时使用 缓存查询结果
  • 前端与传输:运行 npm run production 压缩资源;启用 HTTP/2Gzip;静态资源使用 CDN
  • 进阶方案:对长生命周期进程与极低冷启动需求,可考虑 Laravel Octane 进一步提升吞吐。

四 数据库与 Redis 优化

  • 安装与连接 Redis:在 Ubuntu 上执行 sudo apt install redis-server 并启动;在 .env 设置 REDIS_HOST=127.0.0.1REDIS_PORT=6379
  • 作为缓存与会话后端:在 .env 设置 CACHE_DRIVER=redisSESSION_DRIVER=redis,Laravel 配置 config/cache.phpconfig/session.php 使用 redis 驱动。
  • 缓存使用模式:用 Cache::remember(‘key’, 60, fn() => …) 缓存查询结果;在 Blade 中用 @cache(‘key’) … @endcache 缓存片段;页面级缓存可按需采用。
  • 队列驱动:将 config/queue.phpdefault 设为 redis,分发任务 SendEmail::dispatch($user),通过 queue:work 异步处理。

五 网络与系统层面优化

  • 高并发网络参数(谨慎调整并观察):在 /etc/sysctl.conf 中增加
    • net.ipv4.tcp_tw_reuse=1net.ipv4.tcp_fin_timeout=30net.ipv4.tcp_keepalive_time=1200
    • net.ipv4.ip_local_port_range=10240 60999net.ipv4.tcp_max_syn_backlog=8192net.ipv4.tcp_max_tw_buckets=5000
      执行 sudo sysctl -p 生效。
  • 文件句柄限制:在 /etc/security/limits.conf 增加
    • * soft nofile 655360* hard nofile 655360
      重新登录或重启后生效。
  • 监控与定位:开发环境可临时使用 Laravel DebugbarBlackfire 定位慢查询与热点路径;生产环境避免暴露调试工具。

0