为什么 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,您将看到应用程序的正常内存使用情况(按类型分配内存)。
我发现 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,您将看到应用程序的正常内存使用情况(按类型分配内存)。