高性能ASP.NET站点(> 1000请求/秒)

时间:2012-03-20 22:45:31

标签: asp.net performance scalability httphandler

我即将编写高性能ASP.NET Json API> 1000请求/秒。我的所有逻辑和处理都是在IHttpHandler中完成的。我通过秒表类测量,处理程序在大约0,1 - 0,5毫秒内完成一个请求。

但似乎IIS和/或其他HTTPHandlers(模块?)正在带走很多性能。我能以某种方式衡量吗?在配置为获得最佳性能时,IIS中的请求会产生多少开销?

是否会删除所有这些HTTPHandler帮助,还是有其他技巧可以加快速度?除了Session之外,我不需要太多的ASP.NET功能集(如果能够显着提升性能,甚至可以解决这个问题)。

2 个答案:

答案 0 :(得分:11)

测量Web服务器的性能并非易事。需要考虑的一些事项:

  • 找出实际的瓶颈。这可以是内存,磁盘访问,缓存,数据库访问,网络延迟等。使用内存分析器或其他performance profiler来查找。
  • 使用WireShark查找请求在您的计算机上的时长与代码运行时间之间的差异。
  • 尝试其他配置。为ASP.NET提供更多内存。升级测试系统。即,从8GB / 2.5GHz以600请求/秒到16GB / 3.0GHz可以产生6500个请求/秒。绩效增长通常不是线性的。见this document from Microsoft
  • 考虑添加额外的机器。根据您的配置方式,这可以产生高达50甚至更高的性能升级。再次查看MS的文件。
  • 检查these hints by Jon Skeet。评论主题也揭示了一些非明显的潜在瓶颈。

注意1:了解您的工具。 ASP.NET在自己的线程中运行每个请求。线程交换比进程交换更快,但仍需要时间。如果其他处理程序因为它们在请求链中而花费时间,那么禁用它们是有益的。

注意2:stackoverflow的原始侧面目标之一是在ASP.NET中创建一个站点,该站点在max 2服务器上具有出色的性能并且可以处理>每小时1Mln访客。他们设法做到了。我相信他们在上面写了一些博文,但我不记得它们在哪里。

答案 1 :(得分:5)

这是一个非常好的问题。一旦你进入单毫秒响应时间范围,我就注意到了这一点,ASP.NET开销开始变得明显。我可以证实你的观察。

我成功完成的工作是找出哪些HttpModule已注册(使用IIS管理器)并禁用所有这些我可能会被删除的内容。标准的ASP.NET管道配置了许多模块和功能。

如果你需要最终的性能,你当然可以使用一个小的HTTP服务器库,并以这种方式摆脱几乎所有的开销。这将非常快。