【发布时间】:2012-11-29 14:49:49
【问题描述】:
我们的 asp.net 应用程序目前遇到大量有关性能的问题。一直在进行各种调查,目前唯一突出的是工作进程的“JIT 时间百分比”性能计数器。
在一个网站上,这往往会持续飙升至 90-95%,但很难确定这是否具有任何真正的意义,或者只是一个转移注意力的问题。该站点以发布模式发布,编译调试标志设置为 false,按预期在初始加载时发生完全 JIT,但是,当在站点周围导航时,我们仍然会在 JIT 时间计数器中看到这些持续的峰值。有没有人可以帮助了解这个时间是如何计算的,以及它是否是一个可靠的性能指标?
更奇怪的是,在本地 IIS 安装上测试 Web 应用程序时,我再次注意到,初始 JIT 按预期发生,但“% time in JIT”计数器的峰值仅在初始加载时发生每个单独的页面 - 如果我立即刷新该页面,计数器保持在 0。如果我等待几分钟,然后再次刷新该页面,计数器会达到峰值。这应该发生有什么原因吗?这几乎就像页面是 JIT 编译然后缓存了几分钟。
到目前为止,我一直在研究与此计数器相关的要点是 LINQ 查询、正则表达式和通过反射进行的调用,但运气不佳。
非常感谢任何建议/帮助, 谢谢。
【问题讨论】:
-
应用程序池有什么疯狂的设置吗?
-
您可以分析应用程序或附加调试器吗?
-
没有尝试过 NGEN 但一直在看,所以现在再看一下。不确定它是否会解决当前的问题,但尝试一下不会有什么坏处。 NGEN 的唯一缺点是必须在主机(本例中为 Web 服务器)上运行它。没有我知道的“疯狂”设置,并且有内存分析,但没有什么是真正尖叫出来的。
-
您是否检查过事件日志以查看这是否与应用程序池回收一致(jit 是否仅在应用程序池回收后发生?)