解决
我决定尝试使用不同的负载测试工具Apache Bench,结果明显不同。 AB没有显示任何减速,而save.ashx处理程序的吞吐量现在处理大约1200个请求/秒。经过几天的测试,负载测试工具出现故障。 ASP.NET和IIS都没问题。
原始问题
我正在构建一个ASP.NET站点,旨在在很短的时间内从HTTP帖子中收集大量数据。想想超级碗广告的表格注册。没有实际的页面查看,这些都是在一个单独的系统上处理的。
为了使事情尽可能简单,我使用通用处理程序(ashx)来捕获表单注册数据。处理程序只是读取一些表单值并将数据写入静态ConcurrentQueue。代码基本上是这样的:
public void ProcessRequest(HttpContext context)
{
var formSubmission = new FormSubmission();
var form = context.Request.Form;
formSubmission.EmailAddress = form["EmailAddress"];
formSubmission.PostalCode = form["PostalCode"];
FormSubmissionQueue.Queue.Enqueue(formSubmission);
context.Response.End();
}
当我尝试使用大量并发连接加载测试时发生了什么(500)快速处理前100-200个帖子,然后一切都暂停一会儿,然后另一个快速批处理然后稍微停顿等等
我尝试在没有太大成功的情况下对网站进行分析,我开始认为减速与垃圾收集或线程有关,但不知道确切的位置。我在IIS Express(8.1)和Azure网站上看到相同的行为。
有人可以推荐一个可以调整的地方或设置吗?我只是处于IIS可以做的极限吗?在我的本地机器(Surface Pro i5)上,我在大约4-5(编辑,现在1.5)秒内完成了所有500个帖子。
答案 0 :(得分:0)
问题最终成为我正在使用的负载测试工具。请参阅上述问题中的注释。