为什么 IIS 不在 Windows Server 2012 上的 w3wp 进程中加载​​ ngen 程序集

Why IIS doesn't load ngen assemblies in w3wp process on Windows Server 2012

我发现 IIS 没有在 Windows 服务器 2012 上加载 ngen 程序集(.ni - 本机图像)的问题。因此它从 GAC 加载它们并在每个进程中 JIT 它们。

我知道 native images 可以跨进程共享,因此 JIT 编译这些程序集没有成本。

这听起来很奇怪,但是 Windows Server 2012 上的 w3wp 进程中没有本机图像 (.ni)(见屏幕截图),但它在我的计算机上正常加载。

结论 本机图像存在并通过路径 C:\Windows\assembly\NativeImages_v4.0.30319_64 放置在服务器上,但 w3wp 没有加载它们。

w3wp 进程位于 Windows Server 2012

w3wp 进程位于 Windows 10 Pro

此问题的根本原因是 NewRelic 安装在此 Windows 服务器上。

因为它使用 Profiling API 从数据库或 Web 事务中获取指标,所以它停止了共享程序集的机制。

如果您从服务器中删除 NewRelic,您将看到应用程序的正常内存使用情况(按类型分配内存)。