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

Tob*_*idi 16 asp.net performance scalability httphandler

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

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

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

Abe*_*bel 11

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

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

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

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


usr*_*usr 5

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

我成功完成的是找出哪些HttpModules已经注册(使用IIS管理器)并禁用所有这些我可以摆脱它们.标准的ASP.NET管道配置了许多模块和功能.

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