如何跟踪 ASP.Net JIT 编译?它很慢
Posted
技术标签:
【中文标题】如何跟踪 ASP.Net JIT 编译?它很慢【英文标题】:How can I trace ASP.Net JIT Compilation? Its very slow 【发布时间】:2011-07-21 16:33:11 【问题描述】:如何跟踪应用程序的 JIT 编译?我们有一个小型 asp.net 应用程序,它是大型网站的一部分(其余代码为经典 asp),因此访问频率不高,并且(可能)在超时或应用程序池回收后重新编译。重新编译最多需要 2 分钟!
perfmon 中是否有跟踪工具或计数器可以帮助我跟踪到底发生了什么?
我打算尝试预编译,但我认为超时和应用程序池回收会使它变得毫无用处。 (或者这是一个糟糕的假设?)
提前谢谢!
【问题讨论】:
【参考方案1】:如果您真的认为问题出在 Jit,您可以使用 .NET 性能计数器。打开“性能”管理控制台(因操作系统而异)并单击+,然后添加.NET CLR Jit
计数器:
这将允许您获得有关 Jit 的一些简单指标,在其中花费了多少时间等。
现在,我认为问题不完全在于“Jit”。可能是 ASP.NET 将您的应用程序编译为 Temporary ASP.NET Files
,可能是强名称签名检查等。除了 CLR Jit 之外,我还会考虑许多其他事情。
Jit 特别是当 IL 代码被运行时编译为本机代码时,或者在 NGEN 中找到它。您的整个应用程序不会一次全部 JIT - 每个方法都是根据具体情况 JIT 的。
我认为最好的办法是查看 ASP.NET Applications
对象下的 Compilations Total 计数器,并尝试预编译您的网站。
【讨论】:
看来你是对的。 Jit 中的时间百分比最大值为 17,但直到我单击该特定应用程序的链接后近一分钟才超过 0。在 Jit 之前是否有任何计数器可以跟踪进程? 哦......第二个问题也是......有没有办法“重置”一切?我在两次测试之间等待了一个小时,因为一个简单的应用程序池回收不会产生 1.5 分钟的初始负载……就在我等待一段时间后再再次访问该链接时。谢谢! 肖恩,我正在研究第一季度。对于 Q2,尝试停止 IIS,并删除C:\WINDOWS\Microsoft.NET\FrameworkXX\vZZZZZZ\Temporary ASP.NET Files
中的所有内容,如果您的工作进程是 64 位,则 XX 是空的或 64;其中 ZZZZZ 是 AppPool 的 .NET Framework 版本。例如,如果我的应用程序池是 32 位并且在 .NET Framework 4 上,则它将是 C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files
。然后启动 IIS 备份。
Shawn,当您的应用程序正在加载时,您是否看到任务管理器中正在运行一个名为vbc.exe
的进程? (确保为所有用户显示进程)。
那台机器上的其他开发人员,所以我无法停止 IIS,但我确实停止了我的应用程序所在的应用程序池,并且能够删除那里的临时文件。谢谢你,谢谢你花时间帮助另一部分!以上是关于如何跟踪 ASP.Net JIT 编译?它很慢的主要内容,如果未能解决你的问题,请参考以下文章