ASP.NET检索平均CPU使用率

时间:2010-05-24 15:18:20

标签: asp.net performance performancecounter

昨晚我在网站上进行了负载测试。我发现我的一个共享缓存是一个瓶颈。我正在使用ReaderWriterLockSlim来控制数据的更新。不幸的是,在某一时刻,大约有200个请求试图在大约同一时间更新数据。这也与CPU使用率峰值同时发生。

正在更新的数据位于ASP.NET缓存中。我想做的是如果CPU使用率大约是75%,我想跳过缓存并在另一台机器上点击数据库。

我的问题是我不知道创建一个新的性能计数器以检查cpu使用情况有多昂贵。此外,如果我可能喜欢过去2或3秒内的平均CPU使用率。但是,我不能坐在那里计算cpu时间,因为这需要比目前更新缓存所花费的时间更长。

有没有简单的方法来获得平均CPU使用率?这有什么缺点吗?

我也在考虑总计锁的等待数,然后在某个阈值切换到数据库。我对这种方法的担忧是,改变硬件可能允许更多的锁,而系统上的压力更小。并且找到适当的阈值平衡将是麻烦的并且它没有考虑机器上的任何其他负载。但这是一种简单的方法,简单的方法是99%的时间更好。

1 个答案:

答案 0 :(得分:1)

Microsoft的这篇文章涵盖了Tuning .Net Application Performance,并重点介绍了要收集和比较哪些计数器以确定CPU和I / O绑定的应用程序。

你听起来好像想要在执行期间监视它,并在事情变得密集时绕过你的缓存。这不仅仅是将密集处理从缓存调用转移到数据库调用吗?当然,你有缓存来避免昂贵的数据库调用。

您是否正在尝试重新填充无效的缓存?从缓存提供过时数据有什么影响?您可以锁定重新填充函数,并将过时数据提供给其他请求,直到该过程完成。

根据上述文章,我们在测试期间收集了以下计数器对象,并为我们提供了确定瓶颈的所有必要计数器。

  • .NET CLR例外
  • .NET CLR内存
  • ASP.NET应用程序
  • ASP.NET
  • 内存
  • 分页文件
  • 处理器

CLR TuningASP.NET Tuning文章中的部分突出显示了可能出现的瓶颈,并建议配置更改以提高性能。我们当然对线程池设置进行了更改以获得更好的性能。

Changing and Retrieving Performance Counter Values可能有助于通过代码访问现有的处理器计数器,但这不是我个人尝试过的。