asp.net.netwindows-server-2012-r2iis-8.5ngen

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


I've found the problem that IIS didn't load ngen assemblies (.ni - native images) on Windows server 2012. So it loads them from GAC and JIT them in every process.

I know that native images can be shared across processes, so there is no cost for JIT to compile those assemblies.

It sounds strange, but there is no native images (.ni) in w3wp process on Windows Server 2012 (see the screenshot), but it loads normally on my computer.

In conclusion Native images exist and are placed on the server by the path C:\Windows\assembly\NativeImages_v4.0.30319_64, but w3wp doesn't load them.

w3wp process located on Windows Server 2012 vmmap-server-2012

w3wp process located on Windows 10 Pro vmmap-computer


Solution

  • The root cause of this problem is a NewRelic installation on this Windows server.

    Because it uses Profiling API for getting metrics from db or web transactions, so it stops mechanism of sharing assemblies.

    If you remove the NewRelic from the server you will see normal memory usage of your application (distribution of the memory by types).