【问题标题】:IIS performance improveIIS 性能提升
【发布时间】:2015-03-04 13:32:08
【问题描述】:

目前:

我有一个 ASP NET 项目,它使用了几个 ASHX。 每天 50000 次登录 API 调用几乎无法接受(并且每次登录都有不同数量的其他 API 调用)

但现在每天 150,000 次登录 API 调用需要 >1 分钟。

为了解决/解决问题,我在 API 的 1 个中使用 sproc 调用完成了这些操作,该调用仅检索数据:

1) 我在另一个全新的实例中运行它,在本地机器上,它的运行时间不到 100 毫秒;当前 Web 实例运行 > 1 分钟

2) 我在 SSMS 中单独运行 sproc,它需要 1 分钟

3) 我对该特定存储过程进行了本地参数分配,以防止参数嗅探并重新构建和重新执行,结果相同。

4) 序列化 Json(newtonsoft) 使用静态的部分,也很快,不到 1 秒。

我跑了“http://tools.pingdom.com/fpt/”,确实很慢;但我不知道为什么它很慢。

我尝试使用“DebugView”(“https://technet.microsoft.com/en-us/library/bb896647.aspx”),因为它可以在没有文件锁定的情况下写入大量日志,但不确定如何将它用于 Web 应用程序。

无论如何/工具可以从外部准确地捕获独立的 begin_request 和 end_request 时间?(我试图将时间跨度放在 Global.asax 中,但有时会得到一些空参数)最好如果有人有找出导致它的部分的想法。

样本时间跨度测试:

private string single_detail(HttpContext context)
    {
        PlayDetailApiResult o = new PlayDetailApiResult
        {
             ...
        };

        string json = generateJsonFromObj(o); // init default

        try
        {

            {
                {
                    long current = 0;
                    DateTime dtStart = DateTime.Now;
                    // call sp
                    int ret = plmainsql.getPracticeQualificationTimeLeft(...);

                    DateTime dtEnd = DateTime.Now;

                    TimeSpan ts = dtEnd - dtStart;
                    LoggingHelper.GetInstance().Debug("single_detail getPracticeQualificationTimeLeft's duration(ms): " + ts.TotalMilliseconds);

                    if (ret != 0)
                    {
                        o.Code = ...;

                    }
                }

                DateTime dtStart_1 = DateTime.Now;
                json = generateJsonFromObj(o);
                DateTime dtEnd_1 = DateTime.Now;
                TimeSpan ts_1 = dtEnd_1 - dtStart_1;
                LoggingHelper.GetInstance().Debug("single_detail generateJsonFromObj's duration(ms): " + ts_1.TotalMilliseconds);
            }
        }
        catch (Exception ex)
        {
            LoggingHelper.GetInstance().Debug("single_detail : " + ex.Message + "|" + ex.StackTrace);
        }
        finally
        {

        }

        return json;
    }

大部分结果:

2015-03-04 18:45:29,263 [163] 调试 LoggingHelper single_detail getPracticeQualificationTimeLeft 的持续时间(毫秒):5.8594

2015-03-04 18:45:29,264 [163] 调试 LoggingHelper single_detail generateJsonFromObj 的持续时间(毫秒):0

这些我记下了。

1) 计算机的处理器使用率和内存使用率:内存在 70%,我认为这还不是峰值

2) 检查是否启用了 Gzip 压缩:我的 json 在移动设备上运行 (iOS/Android/WM);需要进行一些代码更改,并且未经测试以防止任何压缩-解压缩问题;因为压缩同时也会增加 CPU 使用率

【问题讨论】:

  • 分析器?在您的 .net 代码中添加行以检查通话前后的时间?
  • 您需要使用分析器来查明您的瓶颈所在,并专注于此。我以前使用Red Gate ANTS profiler 很幸运。我与 Red Gate 没有任何关系 - 我只是对该产品有过很好的体验。
  • @TabAlleman:sql 分析器?它在 SSMS 上运行得非常快;
  • @G_P:它可以分析当前正在运行的 ASP Web 项目吗?不过有点贵。
  • Profiler 会在您的应用调用它时告诉您它的运行速度。

标签: asp.net sql-server


【解决方案1】:

您也可以尝试使用 miniprofiler。它非常易于使用,并显示您要监控的每个步骤或功能的执行时间。

查看http://miniprofiler.com/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-04
    • 2017-10-08
    • 2015-12-26
    • 2013-05-12
    • 1970-01-01
    相关资源
    最近更新 更多