linux - 在适用于 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 或其他后续版本中获得地址?
解决方案
至少对于 CosmosDB,在使用 .NET SDK 时,有一个记录在案的 Windows 性能偏好:
我们建议使用 Windows 64 位主机处理以提高性能。SQL SDK 包含一个本地 ServiceInterop.dll,用于在本地解析和优化查询。ServiceInterop.dll 仅在 Windows x64 平台上受支持。对于 Linux 和 ServiceInterop.dll 不可用的其他不受支持的平台,将对网关进行额外的网络调用以获取优化的查询。
推荐阅读
- java - 如何允许 Introspector.getBeans.getPropertyDescriptors() 导致插入顺序而不是字母顺序
- matplotlib - 如何在显示中更改条形的轮廓宽度?
- stored-procedures - 雪花存储过程并行执行
- apache-spark - Synapse Analytics sql 按需同步与火花池的查询速度非常慢
- python - 为什么打开并显示此图像时颜色会完全改变?如何将 ICC 配置文件添加到图像?
- gnuplot - 在 gnuplot 中缩放图像以匹配数据大小
- angular-cli - 如何检查 npm 安装的进度?
- java - 在java中用sha-256散列一个十六进制数
- azure-functions - sls 调用总是得到“需要提供要调用的函数名称”
- direct3d11 - 调整窗口大小时 Direct3D11 崩溃和/或故障