【问题标题】:ASP.NET performance under load负载下的 ASP.NET 性能
【发布时间】:2014-05-14 13:46:19
【问题描述】:

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

  1. ASP.NET/Requests 当前性能计数器峰值
  2. ASP.NET/Requests Queued perf 计数器略有上升,但仍低于 10
  3. .NET CLR LocksAndThreads/当前队列长度峰值

在此之后,负载测试永远不会恢复。 (注意:我不是在寻求帮助为什么应用程序崩溃,这是我正在单独处理并将修复的其他问题,但总会有新的应用程序崩溃,我不希望我的应用程序在以下情况下无法恢复加载)。如果我只是在负载测试的中间重新启动 IIS,或者如果我在新重新启动的 IIS 实例上开始负载测试而不让用户数量逐渐增加(只需使用 500 个用户从开始)。

所以我的问题是,为什么 IIS 在启动时无法正确处理大量用户?

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

【问题讨论】:

  • 这个应用在什么版本的 IIS 和 .NET 下运行?
  • 答案很可能在应用程序池的“高级设置”中,如果您也可以分享这些内容会有所帮助
  • 添加了版本号和高级设置来提问。还有什么需要的吗?
  • 请也包括这些属性:应用程序池的队列长度属性和最大工作进程
  • 我已将数字添加到问题中。谢谢!

标签: asp.net iis


【解决方案1】:

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

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

你可以:

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

【讨论】:

  • 不过,这些是否说明了为什么应用程序永远无法恢复?似乎在启动时执行这些操作后,应用程序应该能够再次开始服务请求。
  • @skb 我猜您最终可能会陷入由您的错误之一触发的循环循环。或者只是达到一个限制,导致池一次又一次地回收。为单个用户启动并运行您的应用需要多长时间?
  • 我假设如果我运行iisreset 并等待它完成然后运行一个简单的测试,那么测试所花费的时间大约是您要求的时间,对吧?测试很短,我想这会让我知道需要多长时间才能开始备份。我会检查并回复您。
猜你喜欢
  • 1970-01-01
  • 2012-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-11
  • 1970-01-01
  • 2012-06-06
  • 2010-09-08
相关资源
最近更新 更多