IIS 30秒响应延迟

时间:2020-05-20 22:58:34

标签: c# iis timeout

我承认这将是模糊的,但我会尽力而为。我有一个网站,通常每天会看到几百个用户,而很少看到CPU使用率超过5%。该网站在Windows 2012 R2,IIS 8.5,MS SQL Server 2016,.NET 4.5上运行。

问题是偶然请求需要30秒才能响应。我进行了跟踪,以查看减速发生的位置,它是在控制器返回ActionResultApplication_EndRequest的过程之间-总是 30秒,+ /-0.1-和结果是200(OK),而不是服务器超时-或数百个日志条目中最多为1-3秒(即,我从未见过延迟> 3和<30)。从Application_BeginRequest到控制器返回的时间可以忽略不计,最多只有几十毫秒。

奇怪的是,只有少数用户遭受此困扰。我从未见过这种情况发生,也没有其他人发生。但是一小部分可以相当定期地复制它,尽管可能只有十分之一到五十倍。所有人都有合理的互联网连接(至少他们这样说)。

IIS应用程序池设置为4000个队列长度,唯一提及的30s是Ping周期。

部分控制器:

public class MyController : Controller
{
    private readonly ApplicationDbContext db = new ApplicationDbContext();

    public async Task<ActionResult> MyMethod(string x)
    {
        [...more code here, but log the time just before returning...]
        HttpContext.Items.Add("stopTimer", DateTime.Now.ToString("HH:mm:ss.fff"));
        return contentResult;
    }

    protected override void Dispose(bool disposing)
    {
        if (disposing)
        {
            db.Dispose();
        }
        base.Dispose(disposing);
    }
}

dbApplicationDbContext,没有花哨,只有一堆DbSet。控制器方法本身会执行“选择”查询,但不会插入/更新/删除任何内容。

global.asax.cs的一部分:

    protected void Application_EndRequest(Object sender, EventArgs e)
    {
        string stopTimer = HttpContext.Current.Items["stopTimer"] as string;
        LoggerController.LogWarning("c " + stopTimer);
        LoggerController.LogWarning("d " + DateTime.Now.ToString("HH:mm:ss.fff"));
    }

日志文件输出:

Today at 14:57:10   Warning     c 22:56:40.673
Today at 14:57:10   Warning     d 22:57:10.684

我不知所措,无法确定造成此延迟的原因。有什么想法下一步要寻找吗?谢谢。

0 个答案:

没有答案