在尝试使用托管 nt 服务重现报告的问题时,我注意到性能计数器“# of Methods Jitted”不断增加(与“# of IL Bytes Jitted”一起)。报告的行为包括占用大量内存(不一定是机器上可用的所有内容)和消耗 100% 的 cpu。对此 nt 服务的请求(通过 wcf)通常会导致超时,即 90 多秒。(请求来自同一台机器上的 asp.net 站点。)
经过 15 分钟的预热时间后,该值为 127k (3610 kb),一个小时后为 246k (6427 kb),即增加了 119k jitted 方法。
我不认为仅是这种行为会导致报告的问题,因为在服务受到严重破坏之前报告的运行时间只有几个小时。
但是,我仍然对如何解释这个 [显然] 不断增加的数字感兴趣。虽然每小时只有 3 mb,但每周将达到 500 mb。而且,任何人都知道“# of IL Bytes Jitted”是否是垃圾收集的主题?
(在写这篇文章的 20 分钟内,方法数量增加了 33k,字节数增加了约 300k。)
我第一次应该提到的事情......; )
- 我们没有创建、加载或卸载任何应用程序域的代码。
- 我们没有发射任何东西,并且使用 C# 3,所以没有动态对象。
- 我们正在使用 NHibernate 和 AutoMapper,它们都使用反射来解决它们的目标。但是,我认为这些库表现良好并且不会导致这种行为。(那里有任何工具可以让我看到哪些方法被jit了?)
变化
- 删除代码行数和 jitter 方法数之间的比较。正如 Oded 所指出的,计数器还包括 .NET Framework 中的方法。