如何在应用层(WCF)中找到高CPU使用率的根本原因

时间:2015-08-04 07:15:54

标签: asp.net performance entity-framework wcf debugdiag

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

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

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

我曾尝试使用DebugDiag,但无法找出任何有用的信息。

以下是服务器的配置:

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

核心数量(虚拟)8

RAM 8GB

操作系统Windows Sever 2012 Standard

处理器类型64位

软件安装.NET Framework 4.5

App Server(数量= 1)处理器Intel Xeon CPU X5675 @ 3.07 GHz 3.07 GHz

核心数量(虚拟)8

RAM 8GB

操作系统Windows Sever 2012 Standard

处理器类型64位

软件安装.NET Framework 4.5

数据库服务器(数量= 1)处理器英特尔至强CPU E7-4830v2 @ 2.20 GHz 2.19 GHz

核心数量(虚拟)8

RAM 8GB

操作系统Windows Sever 2012 Standard

处理器类型64位

安装了Microsoft SQL Sever 2014的软件

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

  • Windows sysinternal工具Process Explorer(Procexp)是查找高CPU进程和线程调用堆栈(方法调用)的好工具

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

使用Thread计数器收集perfmon日志。 Perfmon - >添加计数器 - >线程下的线程选择%Processor Time,ID thread,ID process。

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

希望这有帮助。

谢谢,

Parthiban