ASP.NET Core 2.2 CPU 使用率很高

ASP.NET Core 2.2 experiencing high CPU usage

所以我在 Azure(S2 计划)上托管了 asp.net 核心 2.2 Web 服务。问题是我的应用程序有时会变得很高 CPU 使用率(几乎 99%)。我现在所做的 - 在 azure 上检查了进程资源管理器。我看到有很多进程正在消耗 CPU。也许有人知道这些进程是否可以消耗 CPU? 目前,我不知道它们来自哪里。也许他们在这里很正常。

简要介绍一下我的申请: 目前,没有太多的流量。一天500-600个请求。大部分请求用于与MSSQL通信,查询记录,添加等。 我也在使用 MS Websocket,但是当没有 WebSocket 客户端连接到 Web 服务时会发生高 CPU,所以我几乎不相信这是一个原因。我尝试使用 apache ab 进行负载测试,但没有任何模式表明在一个请求的负载测试后,我会变得很高 CPU。所以在负载测试期间有时会发生,有时不会。

所以我只是更新了进程的屏幕截图,我看到在 fluent migrator 启动 运行 其日志记录期间有很多线程正在 locked/used。

更新* 我将从 Configure 方法中删除流利的迁移器日志记录中间件。将期待与情况。

更新**

所以我删除了 FluentMigrator 的日志记录。到目前为止,我没有注意到任何 CPU 使用率超过 90%。

但是,我还是很困惑。我的 CPU 用法正在旋转。是否健康 CPU 使用图? 另外,我尝试在 websocket 服务器上进行负载测试。 我制作了一个脚本,每 100 毫秒从 6-7 个客户端调用 WebSocket 的一些函数。因此,每 100 毫秒就有 7 次来自不同客户端的 WebSocket 服务器调用,每个函数本身都会查询一些 data/insert(每个 WebSocket 函数大约有 3-4 次查询)。

我确实注意到,在 Azure S1 DTU 20 上,2 分钟后我正在退出 SQL 池连接,如果我将 DTU 增加到 100,它会正确处理 7 个客户端而不会出现任何 'no connection pool'. 那么第一个问题:是正常的CPU旋转吗? 第二:我是否应该在 DTU 10 Azure SQL 上使用这种负载测试得到 'no SQL connection free' 的错误消息?恐怕在单例 WebSocket 服务上创建作用域服务时会泄漏连接。 这个主题太长了,也许我应该换个新主题?

-

在这个阶段我会说您需要分析您的应用程序并弄清楚您的代码的哪些区域是 CPU 密集的。过去我使用过 dotTrace,这突出显示了调用树中最昂贵的方法。

一旦您知道代码库的哪些区域效率最低,您就可以开始重构它们以提高它们的效率。这可能只是更改一些小操作,例如为查询添加缓存或使用分布式锁定。

我认为其他 DLL 显示 CPU 用法的原因是因为您的代码调用方法在这些 DLL 中。