iis 7.5 ASP.net挂起请求

bis*_*ton 4 asp.net iis performance webserver

我的iis网络服务器存在一些性能问题.它随机悬挂,我试图弄清楚如何加速服务器.我在服务器上启用了失败的请求跟踪,并将其设置为在请求超过3秒时生成日志.

生成的日志(xml)没有显示多少,但紧凑性能日志中有一点指示服务器挂起的日志部分.下面是发生大量时间损失的日志部分.

65. i GENERAL_GET_URL_METADATA PhysicalPath="", AccessPerms="513" 17:46:32.577

66. i HANDLER_CHANGED OldHandlerName="", NewHandlerName="ExtensionlessUrlHandler-Integrated-4.0", NewHandlerModules="ManagedPipelineHandler", NewHandlerScriptProcessor="", NewHandlerType="System.Web.Handlers.TransferRequestHandler" 17:46:32.577

67. i VIRTUAL_MODULE_UNRESOLVED Name="FormsAuthentication", Type="System.Web.Security.FormsAuthenticationModule" 17:46:47.771

我不确定Handler的改变是什么,但需要很长时间,任何提示都会很好,从哪里开始寻找.

slv*_*ron 8

如果没有任何代码,很难找到解决方案.以下是一些可以遵循的一般提示/技巧,以便在ASP.NET应用程序中获得出色的性能.

  • 做出请求的最快方法是首先不要这样做.尝试缓存可以缓存的所有内容.有服务器端缓存和客户端缓存.每个都有自己的用途,但您不仅限于一种类型.
  • 确保不缓存和/或保留任何与请求相关的对象的引用到内存中.ASP.NET具有有限数量的并发请求,并且在内存中保留请求引用将使服务器在线程用尽时挂起
  • 完成后立即关闭请求
  • 客户在请求时不需要的所有内容都应在后台完成
  • 确保应用程序中没有内存泄漏.垃圾收集通常是ASP.NET应用程序中挂起的原因.收集垃圾时,所有正在运行的线程都会暂停.Gen 2垃圾收集尤其如此.您可以启用后台生成2垃圾收集.
  • 隔离有问题的代码.使用分析器并查看哪种类型的请求是CPU密集型的.然后深入挖掘并查看该请求内部的内容使其变慢.
  • 在任何均衡的应用程序中,对象应该是短暂的并且永远存在.对于ASP.NET应用程序,在请求过程中创建的对象理想情况下应该在该请求中或在下一个GC gen 0期间死亡.
  • 考虑对象很长的初始化对象和对象的对象池
  • 确保您的应用程序池没有完全崩溃并重新启动(查看IIS日志和/或Windows事件)

您可以使用一些有用的调试工具:

  • LeanSentry.非常适合诊断ASP.NET服务器挂起
  • windbg.高学习曲线,但到目前为止您可以使用最强大的调试工具
  • PerfView.用于分析I/O或CPU使用等ETW事件