You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Linux B3计划Web App部署Laravel 10遇性能与部署慢问题

Laravel 10在Azure App Service(Linux)的性能与部署问题排查与优化

我在Azure Web Services(Linux)的Basic B3计划App Service上部署Laravel 10网站,搭配Azure Database(MySQL),项目仅含首页与认证系统,未使用Docker。


⚠️ 问题如下

1. Laravel路由响应缓慢(约3秒延迟)

  • 首页及/login、/profile等路由响应耗时约3秒,但静态文件(CSS、JS、图片)加载极快;
  • 执行php artisan命令(如php artisan migrate、php artisan config:clear)也异常缓慢;
  • Azure App Service诊断未检测到过载或高CPU占用,监控显示平均响应时间超3秒。

2. 部署速度极慢(约30分钟)

使用GitHub Actions部署,完整流程耗时约30分钟,当前工作流配置如下:

name: Build and deploy PHP app to Azure Web App - WebsiteAppService01

on:
  push:
    branches:
      - production
  workflow_dispatch:

jobs:
  deploy:
    runs-on: ubuntu-latest
    environment:
      name: 'Production'
      url: ${{ steps.deploy-to-webapp.outputs.webapp-url }}

    steps:
      - uses: actions/checkout@v4

      - name: Setup PHP
        uses: shivammathur/setup-php@v2
        with:
          php-version: '8.2'

      - name: Check if composer.json exists
        id: check_files
        uses: andstor/file-existence-action@v1
        with:
          files: 'composer.json'

      - name: Run composer install if composer.json exists
        if: steps.check_files.outputs.files_exists == 'true'
        run: |
          composer validate --no-check-publish
          composer install --prefer-dist --no-progress
          composer dump-autoload --optimize

      - name: Zip artifact for deployment
        run: zip release.zip ./* -r

      - name: 'Deploy to Azure Web App'
        uses: azure/webapps-deploy@v3
        id: deploy-to-webapp
        with:
          app-name: 'WebsiteAppService01'
          slot-name: 'Production'
          package: release.zip
          publish-profile: ${{ secrets.AZUREAPPSERVICE_PUBLISHPROFILE }}

🛠️ 已尝试操作

  • 检查App Service诊断,未发现过载;
  • 测试静态文件加载速度,确认极快;
  • 验证数据库连接,查询正常但不确定速度;
  • 启用缓存与优化:执行php artisan config:cache、route:cache、view:cache、optimize命令。

❓ 疑问

  • 为何Laravel路由响应慢而静态文件加载快?
  • 为何Azure App Service上php artisan命令极慢?
  • 为何部署耗时约30分钟?如何优化GitHub Actions?
  • 如何排查响应时间过长的根因?
  • 数据库连接是否会导致延迟?如何正确诊断?

解决方案与见解

一、路由响应慢&php artisan命令慢的排查与优化

  1. 数据库连接延迟排查

    • 在Laravel中添加数据库连接耗时日志:在config/database.php的MySQL配置中添加'options' => [PDO::ATTR_TIMEOUT => 5],同时在路由开头执行代码记录耗时:
      $start = microtime(true);
      DB::connection()->getPdo();
      $connectTime = microtime(true) - $start;
      Log::info('DB Connection Time: ' . $connectTime . 's');
      
    • 确认Azure Database与App Service的地理位置一致,跨区域部署会产生显著延迟;
    • 查看Azure Database的性能指标(CPU、连接数、查询延迟),排查数据库侧瓶颈。
  2. Laravel运行环境优化

    • 确认App Service的PHP版本为8.2,并开启OPcache:在php.ini中配置
      opcache.enable=1
      opcache.enable_cli=1
      opcache.optimization_level=0x7FFFBFFF
      opcache.memory_consumption=128
      opcache.max_accelerated_files=10000
      
      可通过App Service「配置->常规设置->启动命令」添加php -d opcache.enable=1 -d opcache.enable_cli=1 artisan serve,或通过init.sh脚本配置;
    • 生产环境关闭APP_DEBUG=true,调试模式会大幅降低性能;
    • 检查缓存命令是否生效:执行php artisan config:cache后,确认bootstrap/cache/config.php已生成,若未生成需排查bootstrap/cache目录的写入权限。
  3. App Service配置调整

    • 启用App Service的「始终开启」选项,避免应用闲置休眠导致首次请求唤醒延迟;
    • 切换App Service运行栈为「PHP 8.2 (Apache)」或「PHP 8.2 (Nginx)」,不同栈的性能表现存在差异;
    • 查看App Service日志流(Log Stream),排查隐藏的错误或警告(如文件权限、依赖缺失)。

二、GitHub Actions部署速度优化

  1. 缓存Composer依赖
    在composer install步骤前添加缓存,避免重复下载依赖:

    - name: Cache Composer dependencies
      uses: actions/cache@v3
      with:
        path: |
          ~/.composer/cache/files
          vendor
        key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
        restore-keys: |
          ${{ runner.os }}-composer-
    

    同时调整composer install命令为生产环境版本:composer install --prefer-dist --no-dev --no-progress --optimize-autoloader,移除非必须的composer validate步骤。

  2. 优化打包步骤

    • 创建.zipignore文件排除不必要的文件:
      .git/
      node_modules/
      tests/
      .env.example
      .gitignore
      README.md
      
    • 使用tar替代zip提升打包效率:
      - name: Create deployment artifact
        run: tar -czf release.tar.gz --exclude-from=.zipignore .
      
      部署步骤中指定package: release.tar.gz即可。
  3. 部署方式优化

    • 直接使用Azure App Service「部署中心」关联GitHub仓库,Azure会自动优化部署流程;
    • 若坚持使用GitHub Actions,可添加clean: true选项到azure/webapps-deploy步骤,减少旧文件清理耗时;
    • 查看GitHub Actions运行日志,定位耗时最长的步骤(通常是依赖安装或打包上传),针对性优化。

三、根因排查方法

  1. 使用Laravel Debugbar临时排查
    生产环境临时安装Debugbar查看请求耗时分布:

    composer require barryvdh/laravel-debugbar --dev
    

    设置APP_DEBUG=true后访问路由,可查看路由解析、数据库查询、视图渲染等阶段的详细耗时。

  2. Azure App Service性能诊断
    使用App Service「性能诊断」工具运行「慢请求跟踪」,生成请求链路分析报告,定位延迟发生的具体阶段。

  3. 命令行耗时分析
    对慢php artisan命令添加-v参数查看详细输出,或用time命令统计耗时:

    time php artisan migrate
    

    同时查看App Service SSH日志,确认命令执行过程中是否存在资源等待情况。


内容的提问来源于stack exchange,提问作者Jaian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 16:06:04