确定对IIS施加压力的因素

时间:2012-06-24 12:20:32

标签: asp.net performance iis

我有一台运行IIS 7.5和SQL Server 2010的专用服务器。服务器CPU负载通常接近100%。 SQL服务器不需要太多,但w3wp进程占用了大量CPU(通常为70 +%)。

我想知道是什么导致了这种压力: *静态文件请求太多(可以添加CDN) *太多的ajax请求(我正在考虑彗星/网络套接字) *单个asp.net页面消耗过多的处理能力(应该易于优化)

您将从哪里开始寻找从哪里开始优化?

4 个答案:

答案 0 :(得分:1)

最简单的方法是在生产中分析应用程序。不确定你的情况是否可行。一些选择:

  • 查看日志并查看请求的持续时间。长请求可能会加载系统
  • 使用Visual Studio远程调试w3wp并暂停调试器10次以查看它停止的位置。那是热点
  • 使用XPerf或PerfView捕获(托管)堆栈。这对生产绩效几乎没有影响

答案 1 :(得分:0)

最简单的解决方法可能是在服务器上安装New Relic。审判持续30天,我认为应该给你足够的时间来深究这一点。它将向您展示长时间运行的SQL查询,.NET方法以及您能想到的其他所有内容。它可以很容易地识别出瓶颈。


顺便说一句,我建议使用New Relic,因为听起来你的问题出在生产环境中。 New Relic并不是一个非常详细的剖析器。它收集了足够的信息以提供帮助,但并不是为了减慢服务器速度。这使它非常适合这个目的。

但是,如果您可以在开发环境中重现该问题,则可以尝试使用免费Eqatec profiler之类的内容。

答案 2 :(得分:0)

一个很好的起点是启动开发工具(IE / Chrome中的F12)并查看网络选项卡下的时间。这将显示一个瀑布风格的图表,说明页面的加载方式,并且应该帮助您识别任何特别缓慢加载的静态文件,这些文件可能会合理地移到cdn,任何不必要的请求,花费了多少时间实际页面本身等。

之后,使用性能分析器对应用程序进行概要分析。像ANTS Performance Profiler这样的好的分析器可以让你查看不同方法的执行时间/命中次数,以及正在运行的数据库查询以及它们需要多长时间。 ANTS的新版本(目前位于EAP)也会按http请求对该活动进行分组,以便您可以查看特定页面是否需要优化或是否被击中太多次。

您还可以检查缓存是否正常工作,以便用户不会不必要地重新请求页面。

还有一篇关于ASP.NET性能的好文章,您可能希望在http://aspalliance.com/1533_ASPNET_Performance_Tips.7阅读。

免责声明:我为制作ANTS的Red Gate工作。

答案 3 :(得分:0)

我找到了一种简单的方法来查看服务器上发生了什么。 然而,专业的方式可能是去使用分析工具。

我做了什么? 在IIS控制台中,您可以获取所有当前工作线程的列表,如果您选择一个,则可以看到此线程正在处理的内容。所以我能够看到该线程并行处理100个请求,其中70个追溯到同一个ajax调用。

直接的解决方案是降低该呼叫的频率(从每10秒到每30秒)。下一步将是进一步优化服务器端的调用,因为我确实有其他具有相同频率(每10秒)的ajax调用,这几乎从未出现在活动请求列表中,因为它们非常快。