我目前的应用程序包含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的软件
答案 0 :(得分:1)
没有比安装APM工具更好的解决方案了。有了他们,你很快就能找到根本原因。 AppDynamics或NewRelic很简单,Dynatrace更复杂但可能更强大。 否则继续在黑暗中拍摄
答案 1 :(得分:0)
OR - 在高CPU进程上使用任务管理器/ Procexp收集多个完整用户转储
使用Thread计数器收集perfmon日志。 Perfmon - >添加计数器 - >线程下的线程选择%Processor Time,ID thread,ID process。
从perfmon中可以找到高CPU线程ID。现在,您可以将线程ID与调试诊断分析报告联系起来,并找到线程调用堆栈。
希望这有帮助。
谢谢,
Parthiban