【问题标题】:How do I track down sporadic ASP.NET performance problems in a production environment?如何在生产环境中跟踪零星的 ASP.NET 性能问题?
【发布时间】:2011-02-04 02:48:17
【问题描述】:

一段时间以来,我的网站偶尔出现性能问题。 90% 的时间网站都非常快。但有时它真的非常非常慢。我的意思是 5-10 秒的加载时间有点慢。我以为我已将其范围缩小到我所在的服务器,因此我将所有内容从完全不同的网络托管公司迁移到了新的专用服务器。但问题还在继续。

我想我正在寻找一个可以帮助我找出问题的好工具,因为它显然不是硬件。我希望能够在我的 ASP.NET 代码中记录某些事件,并让相同的记录器同时跟踪服务器性能/资源。如果我可以回头查看日志,那么我可以看到我的网站在极度缓慢时到底在做什么。

是否有 .NET 日志记录系统允许我使用代码调用它,同时跟踪性能?你会推荐什么?

【问题讨论】:

    标签: asp.net performance sql-server-2008 logging windows-server-2008


    【解决方案1】:

    我曾经遇到的每一个间歇性性能问题都是由数据库中的某些东西引起的。

    您需要查看我的博文Unexplained-SQL-Server-Timeouts-and-Intermittent-Blocking。不,这不是您所期望的由繁重的 INSERT 或 UPDATE 过程引起的。

    我会每天运行 1/2 次的数据库跟踪。是的,必须在生产环境中进行跟踪,因为问题通常不会发生在低使用环境中。

    您的跟踪日志行将有一个“持续时间”列,显示事件花费了多长时间。您正在查看长期运行的那些,以及它们之前可能阻碍长期运行的那些。一旦你找到了模式,你就需要弄清楚事情是如何运作的。

    【讨论】:

    • 我有理由相信这也是由 SQL 中的某些东西引起的。谢谢你的回答,我这周去看看。
    • 我可能找到了问题所在。我忘记在新服务器上设置 IP 过滤器。因此,SQL 日志中有数千次暴力登录尝试。他们都是失败的尝试,因为幸运的是我有一个强密码。但有时一秒钟内有超过 20 次登录尝试。我只能假设这是导致缓慢的原因,但我们拭目以待。我在 Windows 防火墙中添加了一个 IP 过滤器来阻止这些登录尝试。
    • 顺便说一句,我认为这也不能解决缓慢问题。但我今天发现了一些我认为可能终于做到了的东西。无论如何,为了帮助我诊断问题并跟踪改进,我编写了一个简单的记录器,我在下面的回答中提到了它。
    • 哦,对不起。所以所有细节都在ServerFault这里......serverfault.com/questions/131417/…
    【解决方案2】:

    IIS 7.0 具有内置的 ETW 跟踪功能。 ETW 是最快且开销最小的日志记录。它内置在内核中。对于 IIS,它可以记录每个调用。 ETW 的最佳部分是您可以将所有内容包含在系统中,并全面了解应用程序和服务器。例如,您可以包括、注册表、文件系统、上下文切换和获取调用堆栈以及持续时间。

    这里是ETW 和特定于IIS 的基本概述,我在ETW 上也很少有posts

    【讨论】:

      【解决方案3】:

      我将从监控ASP.NET related performance 计数器开始。如果您愿意,您甚至可以将自己的计数器添加到您的应用程序中。此外,查看在减速与正常时运行的 w3wp.exe 进程的数量。查看他们的内存使用情况。对我来说听起来像是内存泄漏,最终导致工作进程终止,这当然可以暂时解决问题。

      【讨论】:

        【解决方案4】:

        您没有提供应用程序正在使用的资源(数据库、网络、文件)方面的详细信息。除了其他海报中的步骤之外,我还会看看“进程外”发生的任何事情,例如:

        • 数据库连接
        • 打开的文件
        • 已访问网络共享

        ...基本上是 ASP.NET 进程中没有发生的任何事情。

        【讨论】:

          【解决方案5】:

          我将从以下项目列表开始:

          • 打开 ASP.Net 运行状况监控以开始获取一些指标和数字。
          • 检查服务器上的内存利用率。定期重新循环 IIS 是否会消除此问题(内存泄漏??)。
          • ELMAH 是开始查看异常的好工具。此外,请查看您的应用程序可能生成的日志。
          • 然后,我会寻找在特定时间运行的防病毒软件或一些可能会减慢机器速度的长时间运行的进程等,数据库备份计划......

          HTH。

          【讨论】:

            【解决方案6】:

            当然,最终我只想解决间歇性缓慢的问题(我还不确定我是否有)。但在我最初的问题中,我要求的是一个相当具体的记录器。

            我从来没有找到答案,所以我写了自己的stopwatch threshold logging。它没有我最初的想法那么详细,但它的好处是可以很容易地全局应用于 Web 应用程序。

            【讨论】:

              【解决方案7】:

              根据我的经验,与性能相关的问题几乎总是与 IO 相关,很少与 CPU 相关。

              为了在不编写检测代码或安装软件的情况下了解事情的进展情况,请使用 Windows 中的性能监视器来查看花费的时间。

              另一种快速了解问题可能出在哪里的方法是在您的计算机上本地运行一个小型负载测试,同时将代码分析器(如 VS 中内置的那个)附加到该进程以告诉您始终在哪里去。我通常会通过这种方法找到一些“速赢”。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2012-06-30
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2010-09-06
                相关资源
                最近更新 更多