我目前正在使用c#编写的.net Web应用程序上运行性能测试。我有一个测试工具,可以在Windows Server 2008上模拟200个用户的负载。
这导致了高达80%的CPU使用率,这对我来说是一个问题。我觉得这可能是我的代码中的问题,因为Web应用程序的工作过程导致高CPU使用率。
如何进一步调试以帮助查找导致此问题的代码可能出现的问题?有什么工具可以帮我解决这个问题吗?我在服务器上运行perf监视器来收集状态,但这只能帮助我。
答案 0 :(得分:3)
另一种选择是 ANTS Profiler ,它有21天的试用期,而且非常好。请参阅:http://www.red-gate.com/supportcenter/content/ANTS_Profiler/articles/profiling_web_app
答案 1 :(得分:2)
将客户端代码(模拟200个用户的测试工具)与服务器分开,并将客户端放在另一台计算机上。
通常客户端代码是瓶颈。
答案 2 :(得分:1)
如果@Diego的答案没有达到最佳效果,请将其从200到200,000个用户增加并运行DebugDiag并将其设置为捕获具有高CPU设置的转储并使该框崩溃。我打算将此作为评论,但我想我会给你一些步骤:
使用IIS定义高CPU利用率问题
当IIS进程(INETINFO.EXE,DLLHOST.EXE,W3WP.EXE)停止响应传入请求并且由于CPU利用率过高而无法提供网页时,将识别高CPU。我们将使用以下步骤获取所需的数据。
故障排除步骤
从服务器上的http://www.microsoft.com/downloads/details.aspx?FamilyID=9bfa49bc-376b-4a54-95aa-73c9156706e7&DisplayLang=en安装DebugDiag。默认安装路径为C:\ Program Files \ IIS Resources \ DebugDiag,可以在安装过程中进行更改。
在问题发生之前设置性能监视器记录:
a)打开DebugDiag(开始 - >程序 - > IIS诊断)
b)转到“工具”菜单 - >选项和设置
c)选择Performance Log选项卡
d)单击“启用性能计数器数据记录”
e)单击“确定”
注意:数据采样间隔和开始监视的时间对于CPU峰值再现的时间是主观的。
使用以下步骤取消选中调试异常捕获(IIS5和IIS5.1):
a)打开IIS的MMC
b)右键单击计算机名称,然后单击“属性”
c)单击Master WWW属性的Edit按钮
d)转到主目录选项卡
e)单击底部的配置按钮
f)转到“Process Options”选项卡,取消选中“Enable Debug Exception Catching”
g)单击“确定”
使用以下步骤创建挂起规则:
a)打开DebugDiag(开始 - >程序 - > IIS诊断)
b)选择“IIS Hang”并单击“下一步”
c)点击“添加网址”,然后输入一个重现挂起的网址,例如http://ComputerName/HelloWorld.aspx,然后点击“确定”。当系统被要求“测试指定的URL”时,请选择“是”
d)单击“确定”并单击“下一步”
e)单击“添加转储目标”并选择所需的目标类型
f)单击确定,然后单击下一步
g)单击“下一步”以获取“规则名称”。 “Userdump Location”可以在这里更改。
h)选择“立即激活规则”,然后单击“完成”
请注意状态为活动状态。每次创建转储文件时,Userdump Count都会增加。
如果服务器在安装时处于高CPU状态,则手动获取数据。在DebugDiag中,转到进程选项卡,右键单击该进程并选择“Create Full Userdump”。
停止PerfMon在转储进程后大约两分钟记录:
a)打开DebugDiag(开始 - >程序 - > IIS诊断)
b)转到“工具”菜单 - >选项和设置
c)选择Performance Log选项卡
d)单击“禁用性能计数器数据记录”
e)单击“确定”
通过选择“高级分析”选项卡并单击“添加数据文件”来分析转储。添加.dmp后,选择“Crash / Hang Analyzers”脚本并单击“Start Analysis”。完成后,将在C:\ Program Files \ IIS Resources \ DebugDiag \ Reports中创建一个报告(.mht)并显示在Internet Explorer中包含结果和建议。如果使用自定义DLL,可以添加自定义PDB文件的符号路径(工具菜单 - >选项和设置 - >符号搜索路径)。
答案 3 :(得分:1)