1

我当前的应用程序包含 3 层-Web 层-应用层-数据库

在对 100 个用户进行测试时,我们发现 App 层的 cpu 接近 90%,而 Web 服务器和数据库服务器运行良好。

我无法弄清楚是什么代码导致 CPU 使用率高。主要是我们在那里进行 CRUD 操作。我们以 DTO 的形式获取输入,我们将它们传输到实体中(使用实体框架),添加/更新/删除到数据库中。在 Get 操作的情况下,我们将数据获取到 EF 实体中,将它们存储在 DTO 中,然后将 DTO 发送给客户端。

我曾尝试使用 DebugDiag,但找不到任何有用的信息。

以下是服务器的配置:

Web 服务器(数量 = 1)处理器 Intel Xeon CPU X5675 @3.07 GHz 2.19 GHz

核心数(虚拟) 8

内存 8GB

操作系统 Windows Sever 2012 标准版

处理器类型 64 位

安装的软件 NET Framework 4.5

应用服务器(数量 = 1)处理器 Intel Xeon CPU X5675 @3.07 GHz 3.07 GHz

核心数(虚拟) 8

内存 8GB

操作系统 Windows Sever 2012 标准版

处理器类型 64 位

安装的软件 NET Framework 4.5

DB 服务器(数量 =1)处理器 Intel Xeon CPU E7-4830v2 @ 2.20 GHz 2.19 GHz

核心数(虚拟) 8

内存 8GB

操作系统 Windows Sever 2012 标准版

处理器类型 64 位

安装的软件 Microsoft SQL Sever 2014

4

2 回答 2

1

没有比安装 APM 工具更好的解决方案了。有了它们,您将很快找到根本原因。AppDynamics 或 NewRelic 很简单,Dynatrace 稍微复杂一些,但可能更强大。否则继续在黑暗中拍摄

于 2015-08-04T10:09:56.293 回答
0
  • Windows sysinternal tool Process Explorer(Procexp)是一个很好的查找高CPU进程和线程调用栈(方法调用)的工具

或 - 在高 CPU 进程上使用任务管理器/Procexp 收集多个完整用户转储

并使用线程计数器收集 perfmon 日志。Perfmon -> Add counter -> Thread under thread select %Processor Time, ID thread, ID process。

从 perfmon 您可以找到高 CPU 线程 ID。现在您可以将线程 ID 与调试诊断分析报告关联起来,并找到线程调用堆栈。

希望这可以帮助。

谢谢,

帕蒂班

于 2017-06-20T22:50:20.110 回答