我应该关注哪些关键性能监视器来监控ASP.NET应用程序?

9
我有一个网站,每天收到500万个请求。在繁忙的日子里,页面需要大约10秒才能返回。我也会遇到内存不足异常。我一直在阅读微软的Improving .NET Application Performance and Scalability,看到有很多指标可以观察。我的问题是:
哪些最基本的计数器应该被观察,以便:
告诉我花费了10秒钟的地方
告诉我内存正在被使用的地方?
这是在运行ASP.NET 2.0应用程序的Win2003上,使用IIS6。

它使用数据库吗?如果是,使用的是哪种类型? - bytebender
是的。Oracle。虽然我的所有依赖项都有自己的性能计数器来记录。 - Brig Lamoreaux
5个回答

1

由于每天的请求次数约为500万条,并且还在增长,

我建议如下:

客户端

获取Fiddler并获取每个页面的请求数和它们的响应时间。首先对第一个请求和连续请求进行5次采样,然后再对数据进行采样并从中得出结论。

需要读取的参数包括:

  • 每个页面有多少个请求?
  • 其中有多少可以缓存?
  • 瓶颈资源是什么?

服务器端

为了确定服务器端的响应时间,我建议使用Ayendes、Rhino.HttpModule或其他类似工具。它可以给出页面在服务器端的响应时间。

需要读取的参数包括:

  • 这是服务器端问题还是客户端问题?

完成上述步骤后,您就可以清楚地知道是客户端问题还是服务器端问题。然后,您可以集中精力解决相关参数。

最后一点,我认为您可以不必更改您的代码。因为您建议在负载下,周转时间约为10秒。请注意,浏览器不能同时请求超过6(+/- 2)个资源。因此,在负载情况下,某些东西正在加载您的Web服务器。模拟这种情况并查看请求计数,Team Foundation System应该能够提供帮助。此外,IIS报告可能会提供服务器端的请求。查看它们,它们可能会给您一个清晰的画面。

希望这可以帮到您。


0

如果你从非常基本的层面来看,你只有四个主要的东西:

  • 磁盘
  • CPU
  • 内存
  • 网络

你可以监控这些:磁盘是队列长度,其他的是%利用率。

然而,问题可能不是这些之一。它可能是一个配置设置,例如,设置最大连接数。寻找这些的好地方是IIS错误日志或事件日志。


0
一个简单的性能提升的关键并不总是在于应用程序的编写方式。即使应用程序已经尽可能地完美编写,它仍然可能存在性能问题。其中一种获得快速页面加载时间的方法是使用页面缓存。
以下文章是一个很好的开始。

0

你没有提供任何有关潜在问题所在的指示,因此请从 @Shiraz 提到的基础知识开始。 有一些性能计数器可以深入挖掘,这应该会给您一个指示。

一旦您将其缩小到特定领域,您就可以深入挖掘,以确定它是编码问题还是硬件问题。

但是解决可扩展性问题并没有什么神奇的“看这里”的方法。 这很困难。


0
关于KPI指标:
其他回答已经提到了一些事情。 我不记得实际计数器名称是什么,但通常包括: 每秒请求数(Web) 处理器使用率(Web和SQL) 大堆的内存GC(第0、1、2代) SQL服务器的缓存命中率 磁盘队列长度(Web,尤其是SQL) 与SQL中阻塞和死锁相关的任何计数器
关于上面的问题获得答案:
通过性能监视器进行排查并不能真正回答您的问题。 如果您没有为此进行测试,则在负载下,我保证您的应用程序将表现出不同的行为。您可能想要进行一些Web负载测试。
您需要尝试熟悉以下工具,以回答这些问题: .NET分析器(用于分析ASP.NET代码) .NET CLR分析器(用于分析内存使用情况)
但是,首先创建Web测试(您可以从Fiddler开始轻松完成此操作),并进一步定制它(以便进行数据绑定)W / VS,并使用接近真实数据表示法(容量和用户数量)运行负载测试。 从Web测试中,您应该能够确定哪些页面的性能不佳。 然后使用分析器深入挖掘以找出原因。

你已经在正确的轨道上查看ScaleNet.pdf(或在线版本)。它有点过时,但仍然有效。继续阅读并应用其中的内容。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接