2014-06-13 23 views
2

我的iis webserver出现一些性能问题。它随机挂起,我试图找出如何加速服务器。我启用了服务器上的失败请求跟踪,并将其设置为在请求超过3秒时生成日志。iis 7.5 ASP.net挂起请求

所生成的日志(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

我不知道什么处理器改变时,但它需要很长时间,任何提示会从哪里开始寻找伟大。

+0

您的WebForms中是否有任何iFrame元素? –

+0

不,我不知道 – bischoffingston

+0

检查apppool何时回收和什么时间需要。 – Amit

回答

1

有很多方法可以提高服务器的性能。但在此之前,您应该首先检查“挂起”期间的CPU使用情况。应用程序代码中的无限循环可能会导致此行为。除非存在I/O,锁定或睡眠循环,否则您将能够从CPU使用率中看到它,因为每个无限循环您都会得到一个完整核心的CPU使用量。

Help link to improve server performance

更多信息: 我可以看到进入与虚拟模块解决:这是关系到坏的使用Response.Redirect(URL)的;另外请确保您在IIS上的集成模式下部署了您的应用程序。

这里有一个简单的清单,你可能想重新考虑: 总是预先编译你的网站,而不是复制它!在部署之前编译您的网站可能会获得显着的性能提升:ASP.NET Precompilation Overview

当您的web.config中的调试标志为true时,不要运行debug =“true”启用的生产应用程序,在内部使用更多内存应用程序在运行时,由于一些额外的调试路径启用,代码可以执行慢得多 检查你的web.config文件,以确保跟踪的部分 被禁用IIS 7.5自带的Auto-Start Feature。 WAS(Windows进程激活服务)启动所有配置为自动启动的应用程序池,以确保您的应用程序池配置为始终运行在IIS 7.5 applicationHost.config,check out here中以获取更多详细信息。

每个asp.net服务器可以通过aspnet.config位于框架中的文件夹的根文件来配置好。确保您的aspnet.config文件中的代码访问安全性(CAS)的发布者证据设置为false,这可能会在您重新启动ASP.NET应用程序池时增加初始页面加载。你可以阅读more about it here

而且你可能想尝试Application Initialization Module for IIS 7.5,该模块也可在IIS 8.0可以减少响应时间,通过预加载工人首先要求处理

+0

对于首页加载,cpu并没有太多的工作。该网站相当简单,应该速度非常快,asp.net框架上的自定义应用程序代码非常少。 – bischoffingston

6

这是很难拿出一个解决方案,而无需任何一块的代码在眼前。这里有一些一般的提示/技巧,你可以通过一个ASP.NET应用程序来获得很好的效果。

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

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

  • LeanSentry。伟大的诊断ASP.NET服务器挂起
  • windbg。高的学习曲线,但迄今为止,您可以使用的功能最强大的调试工具
  • PerfView。用于分析ETW事件,如I/O或CPU使用率
+0

对不起,它不会让我完全适用于过期后的赏金,我已经离开了一段时间。至少,我找不到一种方法来应用完整的赏金。 – MichaelGG

+0

没问题迈克尔:) – slvnperron