ASP.NET在负载下的性能

ASP.NET在负载下的性能,asp.net,iis,Asp.net,Iis,我很难弄清楚为什么我的ASP.NET应用程序不能支持大量并发用户。我正在运行VS负载测试工具,我有大量有价值的数据,但我正在努力筛选这些数据。我使用的是逐步增加虚拟用户数量的用户加载模式,直到达到大约500个。在应用程序中出现未经处理的异常导致其崩溃之前,测试似乎一直没有问题。在崩溃之前,我监视的内存、CPU利用率和所有其他性能计数器都保持完全平坦。但一旦发生碰撞,我会观察到以下情况: ASP.NET/Requests当前性能计数器峰值 ASP.NET/Requests排队的性能计数器略微上升,

我很难弄清楚为什么我的ASP.NET应用程序不能支持大量并发用户。我正在运行VS负载测试工具,我有大量有价值的数据,但我正在努力筛选这些数据。我使用的是逐步增加虚拟用户数量的用户加载模式,直到达到大约500个。在应用程序中出现未经处理的异常导致其崩溃之前,测试似乎一直没有问题。在崩溃之前,我监视的内存、CPU利用率和所有其他性能计数器都保持完全平坦。但一旦发生碰撞,我会观察到以下情况:

  • ASP.NET/Requests当前性能计数器峰值
  • ASP.NET/Requests排队的性能计数器略微上升,但保持在10以下
  • .NET CLR锁和线程/当前队列长度峰值
  • 在此之后,负载测试永远不会恢复。(注意:我不是在请求帮助为什么应用程序会崩溃,这是我正在单独处理并将修复的其他问题,但总有可能出现新的应用程序崩溃,我不希望我的应用程序在加载时无法恢复)。如果我只是在负载测试的中间重新启动IIS,或者在刚开始重新启动的IIS实例上启动负载测试,而不让用户的数量逐渐增加(只需从GEgo上用500个用户敲击它),我也可以复制这种行为。 所以我的问题是,为什么IIS在启动时不能正确处理大量用户

    • .NET版本:4
    • IIS版本:7.5
    • 站点高级设置->最大带宽:2^32(~40亿)
    • 站点高级设置->最大并发连接数:2^32(~40亿)
    • 应用程序池高级设置->队列长度:1000
    • 应用程序池高级设置->最大工作进程数:1

    AFAIK,一旦IIS重新启动或应用程序池回收,将发生以下情况:

    • 必须重新加载程序集
    • 页面将被重新编译
    • SQL连接将被关闭
    你可以:

    • 检查应用程序池高级设置的回收部分,查看是否会在内存限制、正常时间等条件下触发回收
    • 在GAC中加载一些程序集
    • 检查web.config的编译元素中是否没有
      batch=“false”
      属性
    • 提高SQL连接字符串中的最小和最大池大小(不要忘记会话连接字符串)
    • 检查启动时是否没有发生耗时的过程(如某些NHibernate动态映射)

    此应用程序在哪个版本的IIS和.NET下运行?答案很可能在应用程序池的“高级设置”中,如果您也可以共享这些设置,将有助于添加版本和高级设置。还需要什么吗?请包括这些属性:应用程序池的队列长度属性和最大工作进程。我已经在问题中添加了数字。非常感谢。不过,这是否说明了为什么该应用程序永远无法恢复?似乎在启动时做了这些事情之后,应用程序应该能够再次开始服务请求。@skb我想你可能会因为一个错误而进入循环。或者只是达到一个限制,导致池一次又一次地循环。为单个用户启动和运行应用程序需要多长时间?我假设如果我运行
    iisreset
    并等待它完成,然后运行一个简单的测试,测试所需的时间大约是您要求的时间,对吗?测试时间很短,我想这会让我知道重新启动需要多长时间。我会检查一下,然后再给你回复。