【问题标题】:Performance issue on Microsoft Azure App services using Symfony使用 Symfony 的 Microsoft Azure App 服务的性能问题
【发布时间】:2022-06-22 12:21:13
【问题描述】:

当我们将 Microsoft Azure App 服务与 Symfony 应用程序(一个基本的后台应用程序,调用 WS,在 DB 中写入一些数据并将其发送到前台应用程序)一起使用时,我们遇到了性能问题。

为了验证该问题与代码无关,我们尝试在本地和 Microsoft Azure oncloud 虚拟机上使用相同的 ACU。 由于我们的客户政策,我们必须使用应用服务

总结

  • 本地表现不错

  • 虚拟机性能不错

  • 应用服务表现不佳

  • metrics don't show hardware issue

  • 性能似乎与使用 PHP 命令时的磁盘性能和延迟有关(参见下面的 symfony 特定命令)

  • 在应用服务 VS VM/local 上写入磁盘要慢 1000 倍

  • 当我们使用 bin/console 启动命令时,它需要 8 秒 VS 小于 1 用于 VM/local

我们如何测试性能?

当我们访问前端应用时,性能很差,延迟很高。

我们检查了 symfony _profiler、dd 命令和 symfony 特定命令

dd 命令

在应用服务上

root@09b68d228779:/home/site# dd if=/dev/zero of=/home/site/wwwroot/test1.img bs=1G count=1 oflag=dsync
1+0 records in
1+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 21.9822 s, 48.8 MB/s
 
root@09b68d228779:/home/site# dd if=/dev/zero of=/home/site/wwwroot/test1.img bs=512 count=1000 oflag=dsync
1000+0 records in
1000+0 records out
512000 bytes (512 kB, 500 KiB) copied, 31.7151 s, 16.1 kB/s

在 Azure 虚拟机上

user@app:~$ dd if=/dev/zero of=/tmp/test1.img bs=1G count=1 oflag=dsync
1+0 records in
1+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 10.1442 s, 106 MB/s
user@app:~$ dd if=/dev/zero of=/tmp/test1.img bs=512 count=1000 oflag=dsync
1000+0 records in
1000+0 records out
512000 bytes (512 kB, 500 KiB) copied, 9.1723 s, 55.8 kB/s

symfony 特定命令

本地

[INFO] Starting benchmark                                                                                               
------------------------------ ----------  
 Title                          Duration   
------------------------------ ----------  
 Write inside of project dir    0.3 ms     
 Write outside of project dir   0.8 ms     
 Factorials calculation         5.4 ms     
------------------------------ ----------  
mardi 29 mars 2022, 16:36:59 (UTC+0200)

在应用服务上

Tue Mar 29 14:34:19 UTC 2022
 [INFO] Starting benchmark                                                                                              
------------------------------ ---------- 
  Title                          Duration  
 ------------------------------ ---------- 
  Write inside of project dir    558.5 ms  
  Write outside of project dir   2.4 ms    
  Factorials calculation         8.1 ms    
 ------------------------------ ---------- 
Tue Mar 29 14:34:27 UTC 2022

在 Azure 虚拟机上

Tue Mar 29 14:34:09 UTC 2022
[INFO] Starting benchmark
------------------------------ ----------
  Title                          Duration
------------------------------ ----------
  Write inside of project dir    0.4 ms
  Write outside of project dir   0.6 ms
  Factorials calculation         7.2 ms
------------------------------ ----------
Tue Mar 29 14:34:09 UTC 2022

我们的尝试

  • 将应用服务扩展到 P3v2(840ACU,14GB 内存)
  • 将应用服务扩展到 3 个实例
  • 在应用服务上挂载外盘(只能使用CIFS)
  • 联系 Microsoft Azure 支持(经过大量邮件,支持不支持 Symfony)

软件

  • Symfony 5.4.8
  • 我们正在使用以下软件包:
 "require": {
    "php": ">=7.4",
    "ext-ctype": "*",
    "ext-curl": "*",
    "ext-iconv": "*",
    "ext-json": "*",
    "ext-openssl": "*",
    "beberlei/doctrineextensions": "^1.3",
    "composer/package-versions-deprecated": "1.11.99.2",
    "doctrine/annotations": "^1.0",
    "doctrine/doctrine-bundle": "^2.4",
    "doctrine/doctrine-migrations-bundle": "^3.1",
    "doctrine/orm": "^2.9",
    "michaeldegroot/doctrine-encrypt-bundle": "^4.0",
    "nelmio/cors-bundle": "^2.1",
    "phpdocumentor/reflection-docblock": "^5.2",
    "phpoffice/phpspreadsheet": "^1.19",
    "sensio/framework-extra-bundle": "^6.1",
    "symfony/apache-pack": "^1.0",
    "symfony/asset": "5.3.*",
    "symfony/console": "5.3.*",
    "symfony/dotenv": "5.3.*",
    "symfony/expression-language": "5.3.*",
    "symfony/flex": "^1.3.1",
    "symfony/form": "5.3.*",
    "symfony/framework-bundle": "5.3.*",
    "symfony/http-client": "5.3.*",
    "symfony/intl": "5.3.*",
    "symfony/mailer": "5.3.*",
    "symfony/mime": "5.3.*",
    "symfony/monolog-bundle": "^3.1",
    "symfony/notifier": "5.3.*",
    "symfony/process": "5.3.*",
    "symfony/property-access": "5.3.*",
    "symfony/property-info": "5.3.*",
    "symfony/proxy-manager-bridge": "5.3.*",
    "symfony/runtime": "5.3.*",
    "symfony/security-bundle": "5.3.*",
    "symfony/serializer": "5.3.*",
    "symfony/string": "5.3.*",
    "symfony/translation": "5.3.*",
    "symfony/twig-bundle": "^5.3",
    "symfony/validator": "5.3.*",
    "symfony/web-link": "5.3.*",
    "symfony/yaml": "5.3.*",
    "talan/pattern-matching": "^1.1",
    "twig/extra-bundle": "^2.12|^3.0",
    "twig/twig": "^2.12|^3.0"
  },
  "require-dev": {
    "doctrine/doctrine-fixtures-bundle": "^3.4",
    "fzaninotto/faker": "^1.9",
    "phpunit/phpunit": "^9.5",
    "symfony/browser-kit": "^5.3",
    "symfony/css-selector": "^5.3",
    "symfony/debug-bundle": "^5.3",
    "symfony/maker-bundle": "^1.0",
    "symfony/phpunit-bridge": "^5.3",
    "symfony/stopwatch": "^5.3",
    "symfony/var-dumper": "^5.3",
    "symfony/web-profiler-bundle": "^5.3"
  },

Linux Web 应用服务(P1v2:1)

  • 运行时堆栈:PHP7.4
  • 操作系统:Linux
  • 使用代码部署
  • 地区:法国中部
  • 生产类型
  • 大小:P1v2:1(210 ACU,3.5GB 内存)

【问题讨论】:

  • 我建议您使用诸如 blackfire 之类的分析工具来查看您的时间都花在了哪里
  • 我不知道天蓝色,但看起来你的延迟可能与网络有关(网络安装的 symfony 目录)?
  • 您写入的项目目录是应用服务的一部分吗?您可以查看应用服务计划的文件系统存储刀片中描述的内容吗?根据 SKU,吞吐量是有限的......

标签: azure performance symfony azure-web-app-service


【解决方案1】:

这里发生的是应用服务基础架构的一部分,正如您提到的,您高度依赖磁盘。

应用服务使用文件共享并将其挂载为网络驱动器,这会增加 I/O 请求的延迟,这是为了提高可靠性,但通常在处理应用服务和大量磁盘操作时,速度会变慢与使用 VM 或本地计算机时相比。

除了您很可能使用标准 HDD 进行文件共享(无法选择)之外,我建议您尝试使用 BYOS (Bring Your Own Storage) 和高级存储帐户来使用 SSD Storage account overview - Azure Storage | Microsoft Docs

如果这不起作用,容器实例可能是最接近 VM 而无需离开 PaaS 的东西

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多