我在Windows 2008上的IIS7下运行了一个ASP.NET 3.5网站。
当我重新启动IIS(iisreset),然后点击页面时,初始启动非常慢。
我在Process Explorer中看到以下活动:
在此期间我也没有看到任何其他使用CPU的进程。它基本上只是挂起。
在那段时间里发生了什么?我怎样才能追踪到目前为止所做的事情?
答案 0 :(得分:6)
我们遇到了类似的问题,结果是Windows超时检查是否取消了签名证书。检查您的服务器是否正在尝试呼叫某处(例如crl.microsoft.com)。也许您的代理设置不正确?还是防火墙呢?我们最终确定我们对服务器有足够的控制权并且不想“打电话回家”,所以我们只是禁用了支票。您可以通过将以下内容添加到machine.config来实现.NET 2.0 SP1及更高版本。
<runtime> <generatePublisherEvidence enabled="false"/> </runtime>
我不确定你是否可以把它放在你的app.config / web.config中。
答案 1 :(得分:4)
IL正在被Just-In-Time编译器转换为机器本机代码(Assembly),你可以在所有魔法发生时等待。
编译源代码时 托管代码,编译器翻译 微软中间源 语言(MSIL)。这是一个 与CPU无关的指令集 可以有效地转换为 本机代码。微软中级 language(MSIL)是使用的翻译 作为一些的输出 编译器。它是a的输入 实时(JIT)编译器。该 公共语言运行时包括JIT 用于将MSIL转换为的编译器 本地代码。
Microsoft中级语言之前 (MSIL)可以执行它,必须是 由.NET Framework转换 实时(JIT)编译器到本机 码。这是特定于CPU的代码 在同一计算机体系结构上运行 作为JIT编译器。而不是使用 转换所有的时间和记忆 可移植可执行文件(PE)中的MSIL 文件到本机代码。它转换了 然后执行时根据需要使用MSIL 缓存生成的本机代码 它可以随后访问 调用
答案 2 :(得分:4)
将asp.Net页面编译成中间语言+ JIT编译 - 它只在第一次加载页面时才会发生。 (见http://msdn.microsoft.com/en-us/library/ms366723.aspx)
如果真的困扰你,那么你可以通过预先编译你的网站来阻止它发生。
编辑:重新阅读问题 - 60秒很长,您可能会在此期间看到一些处理器活动。检查EventLog中的系统和应用程序目标中的错误/消息。还要尝试在60秒内创建w3wp进程的崩溃转储 - 你可能会通过查看一些调用堆栈来识别它的作用。
如果每次都需要完全 60秒,那么它可能会等待超时--60秒是一个不错的回合数。确保它与域控制器等有正确的连接......
(如果有一些IIS诊断工具可以做得更好,那么恐怕我不知道它们,这个问题可能更适合ServerFault,上面是一个更加开发人员的方法故障排除:-p)
答案 3 :(得分:4)
我发现从前端Web服务器到数据库服务器的初始连接存在网络延迟。
这个问题是Windows 2008和我们特定网络硬件所特有的。
解决方法是在网络服务器上禁用以下内容:
答案 4 :(得分:2)
超过60秒听起来很腥。尝试运行test.html页面以查看需要多长时间。这将隔离IIS7的角色。
然后暂时重命名您的web.config,global.asax和应用程序文件夹,并尝试test.aspx页面(非常简单的页面)。这将隔离ASP.NET。
如果两者都很快(即大约10秒),那么它就是你的应用程序。但是,如果要么慢,那么不是应用程序和服务器本身的东西。
答案 5 :(得分:1)
这个帽子与JIT编译无关。如果此程序集不存在或代码文件已更改,则正常的C#编译器会将文件(.aspx.cs)后面的代码编译为中间语言,并在启动时进入程序集。您的网站程序集位于网站的“bin”文件夹中。
事实上,JIT编译之后会发生,但这非常快,不需要几分钟。 JIT编译在.net应用程序的每次启动时都会发生,并且不会超过查看秒数。
如果将已编译的网站程序集(YourWebsite.dll)部署到bin文件夹中,则可以避免压缩网站。也可以只部署aspx文件并将代码留在文件(aspx.cs)文件之外。
答案 6 :(得分:0)
我一直在与类似的问题作斗争。对我来说,事实证明是我为NLog启用了内部日志记录。它增加了大约3分钟的启动时间!
原始配置
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
autoReload="true"
throwExceptions="false" throwConfigExceptions="false"
internalLogLevel="Debug"
internalLogFile="C:\Temp\NLog.Internal.txt">
固定配置
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
autoReload="true"
throwExceptions="false" throwConfigExceptions="false">
对于信息,我是通过使用SysInternals的ProcMon.exe,对进程名称“ w3wp.exe”进行过滤而发现的