【问题标题】:Why IIS doesn't load ngen assemblies in w3wp process on Windows Server 2012为什么 IIS 不在 Windows Server 2012 上的 w3wp 进程中加载​​ ngen 程序集
【发布时间】:2017-09-15 10:00:09
【问题描述】:

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

我知道native images 可以跨进程共享,因此 JIT 编译这些程序集是免费的。

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

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

位于 Windows Server 2012 上的 w3wp 进程

位于 Windows 10 Pro 上的 w3wp 进程

【问题讨论】:

  • 相对而言,您在应用程序池中设置了哪个版本的 .NET?
  • net clr 版本在所有池中定义为 v4.0,但 web.api 应用程序已编译为 NET 4.5 并且 web.config 包含 targetFramework="4.5"

标签: asp.net .net windows-server-2012-r2 iis-8.5 ngen


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-19
    • 1970-01-01
    • 1970-01-01
    • 2011-01-26
    • 2017-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多