首页 > 解决方案 > 在适用于 Linux 的 Azure 应用服务中运行 .NET Core API 的性能问题

问题描述

我尝试将一些基于 .NET Core 3.1 构建的 Web API 移植到 Azure App Services(在 Linux 上)。早些时候,所有这些 API 都托管在 Azure 应用服务(在 Windows 上)中,但我想将它们移植到 Linux 环境,因为与它们相关的巨大成本收益。

然而,在移植它们并运行一些性能套件后,我发现 Linux 和 Windows 应用服务之间存在严重的性能差异。我原以为 Linux 应用服务的性能会提高或保持不变,但令我沮丧的是,性能实际上下降了。以下是一些结果:

+-----------------------------------------------+-----------+--------+---------+
| Operation                                     | User Load | Linux  | Windows |
+-----------------------------------------------+-----------+--------+---------+
| Cosmos DB Read                                | 50        | 600 ms | 60 ms   |
+-----------------------------------------------+-----------+--------+---------+
| Simple Ping                                   | 50        | 30 ms  | 20 ms   |
+-----------------------------------------------+-----------+--------+---------+
| 15 parallel calls to Azure Feature Management | 50        | 510 ms | 160 ms  |
+-----------------------------------------------+-----------+--------+---------+

是什么导致 Linux 中的这种性能下降?它是 .NET Core 的东西吗,与 Linux 相比,Windows 的性能更好。如果是这样,这是否会在 .NET 5 或其他后续版本中获得地址?

标签: linuxazureazure-web-app-serviceazure-app-service-plans

解决方案


至少对于 CosmosDB,在使用 .NET SDK 时,有一个记录在案的 Windows 性能偏好:

我们建议使用 Windows 64 位主机处理以提高性能。SQL SDK 包含一个本地 ServiceInterop.dll,用于在本地解析和优化查询。ServiceInterop.dll 仅在 Windows x64 平台上受支持。对于 Linux 和 ServiceInterop.dll 不可用的其他不受支持的平台,将对网关进行额外的网络调用以获取优化的查询。


推荐阅读