【问题标题】:diagnosing performance of asp.net website / application pool诊断asp.net网站/应用程序池的性能
【发布时间】:2012-04-13 22:58:43
【问题描述】:

我在使用 ASP.Net/C# 开发的网站时遇到问题,有时会无限期占用所有 CPU 使用率 (100%)。您有什么想法/提示如何解决可能导致这种资源消耗的问题吗?该网站仍在响应,所以它没有崩溃或类似的东西。

我有点不知道从哪里开始!

谢谢!

【问题讨论】:

  • 问题仅在特定页面中?

标签: c# asp.net performance iis application-pool


【解决方案1】:

开始在服务器上使用性​​能计数器。添加垃圾收集、线程使用的计数器,并准确查看哪个线程正在消耗 CPU。

另外,看看这个:

http://weblogs.asp.net/jgalloway/archive/2009/04/09/troubleshooting-an-intermittent-net-high-cpu-problem.aspx

【讨论】:

  • 抱歉耽搁了,但我在国外 - 我在哪里可以找到“线程使用”性能计数器?这是一个实时服务器,它没有安装 Visual Studio 副本。理想情况下,我可以采样 4 个小时的时间,并查看哪些线程对 CPU 使用有贡献。理想情况下,我会知道某个时间点的调用堆栈,因为这对我诊断问题有很大帮助。有什么想法吗?
【解决方案2】:

DebugDiag 是一个很好的起点:http://www.microsoft.com/download/en/details.aspx?id=26798

【讨论】:

  • 谢谢,这个工具在找出当前服务器上当前正在执行的线程方面非常有用!
【解决方案3】:

我在过去遇到了同样的问题。我主要遇到HTML rendering 非常慢的问题。 我通过在页面指令中设置Trace = true 解决了这个问题,并发现了需要时间的事件。

另一个问题是Memory Management。我正在使用Image Classes,但没有正确使用Dispose。为此,我开始使用Dispose() 方法,并且可以在架构中使用 Using 语句。

using (SqlConnection con = new SqlConnection("Connection String"))
{
    using (SqlCommand cmd = new SqlCommand())
    {
        using (SqlDataReader DR = cmd.ExecuteReader())
        {

        }
        using (DataTable DT = new DataTable())
        {
        }
    }
}

我假设您可能有任何页面可能会获取过多的记录。你可以开始使用Paging了。

最重要的一点是Exception HandlingTry Catch 块不应该在每一层中。它应该只在Presentation Layer 中。原因是,当发生异常时,它会直接返回调用函数。那么为什么要在每一层写Try Catch 块和stopping the execution

【讨论】:

    【解决方案4】:

    到目前为止,最好和最简单的起点是使用性能分析器。只需运行它,如果运气好的话,您将在几分钟内解决问题。

    试试dotTrace,这是一个相当不错的。如果您点击链接,则有 10 天免费试用和视频教程。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多