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命令慢的排查与优化
数据库连接延迟排查
- 在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、连接数、查询延迟),排查数据库侧瓶颈。
- 在Laravel中添加数据库连接耗时日志:在
Laravel运行环境优化
- 确认App Service的PHP版本为8.2,并开启OPcache:在
php.ini中配置
可通过App Service「配置->常规设置->启动命令」添加opcache.enable=1 opcache.enable_cli=1 opcache.optimization_level=0x7FFFBFFF opcache.memory_consumption=128 opcache.max_accelerated_files=10000php -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目录的写入权限。
- 确认App Service的PHP版本为8.2,并开启OPcache:在
App Service配置调整
- 启用App Service的「始终开启」选项,避免应用闲置休眠导致首次请求唤醒延迟;
- 切换App Service运行栈为「PHP 8.2 (Apache)」或「PHP 8.2 (Nginx)」,不同栈的性能表现存在差异;
- 查看App Service日志流(Log Stream),排查隐藏的错误或警告(如文件权限、依赖缺失)。
二、GitHub Actions部署速度优化
缓存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步骤。优化打包步骤
- 创建
.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即可。
- 创建
部署方式优化
- 直接使用Azure App Service「部署中心」关联GitHub仓库,Azure会自动优化部署流程;
- 若坚持使用GitHub Actions,可添加
clean: true选项到azure/webapps-deploy步骤,减少旧文件清理耗时; - 查看GitHub Actions运行日志,定位耗时最长的步骤(通常是依赖安装或打包上传),针对性优化。
三、根因排查方法
使用Laravel Debugbar临时排查
生产环境临时安装Debugbar查看请求耗时分布:composer require barryvdh/laravel-debugbar --dev设置
APP_DEBUG=true后访问路由,可查看路由解析、数据库查询、视图渲染等阶段的详细耗时。Azure App Service性能诊断
使用App Service「性能诊断」工具运行「慢请求跟踪」,生成请求链路分析报告,定位延迟发生的具体阶段。命令行耗时分析
对慢php artisan命令添加-v参数查看详细输出,或用time命令统计耗时:time php artisan migrate同时查看App Service SSH日志,确认命令执行过程中是否存在资源等待情况。
内容的提问来源于stack exchange,提问作者Jaian
相关产品推荐
相关产品推荐

