在适用于Linux的Azure App Services中运行.NET Core API的性能问题

问题描述

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

但是,在移植它们并运行了一些性能套件之后,我发现Linux和Windows App Service之间存在一些严重的性能差异。我曾期望Linux App Service中的性能会提高或保持不变,但令我感到沮丧的是性能实际上下降了。以下是一些结果:

+-----------------------------------------------+-----------+--------+---------+
| 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,在Windows中性能要比Linux更好。如果是这样,这是否会在.NET 5或其他后续版本中获得地址?

解决方法

至少对于CosmosDB,使用.NET SDK时,对于Windows有documented performance preference

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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...