【问题标题】:Calculate working space savings when using NGEN计算使用 NGEN 时节省的工作空间
【发布时间】:2013-12-09 23:20:18
【问题描述】:

我目前正在尝试计算 NGEN 是否会对我们的 .NET 客户端在 Citrix 场上运行时节省内存方面有任何好处。

我的主要参考是以下文章:

这篇文章建议使用 VMMap 我只需要检查我的可共享 WS 是否增加并且我是金子。

事实上,我确实看到可共享的 WS 增加了大约 56MB(请参阅之前和之后的图片)。但我也注意到,总 WS 也上升了。也许是由于 NGEN 图像的尺寸增加了?

所以我认为我需要考虑到这一点,实际上我的情况要差几 MB。

但后来我也明白,由于没有发生 JIT,所以我在那里节省了一些空间。我相信 JIT 会出现在私有数据下。

我将其计算为: - [Δ Image ShareableWS] + ([Δ Image PrivateWS] - [ΔPrivate Data Total WS])

使用下图:

  • 56.3 + (-58.3 - -6.8) = 节省 4.8MB(每个后续进程)

所以我想问题是 - 我这样做对吗?我在这里有什么遗漏或没有考虑到的吗?

在 NGEN 之前

NGEN 之后

【问题讨论】:

    标签: .net memory citrix terminal-services ngen


    【解决方案1】:

    我不同意你的假设,即由于总 WS 从 212 上升到 263,你的情况变得更糟。原因是你的总数增加的大部分来自 Shareable 块,你只需支付该可共享块的内存成本一次。

    因此,这实际上取决于您运行应用程序的会话/实例的数量,因为一旦关闭,56MB 就会在所有会话之间有效共享。

    所以权衡是这样的:

    从专用 WS 节省的每个会话 = 86.3 - 81.9 = 4.4MB (= S)

    可共享的每个会话增加 = 56 / num 个会话 (= I)

    所以你想要的是 S > I。显然,对于低会话数,你的情况会更糟,而对于高会话数,你的情况会更好。所以要找到你等价的点:

    4.4 = 56 / 会话数

    给予:Num session = 13

    因此,平均而言,如果您在服务器上运行的应用实例超过 13 个,那么您最好使用 NGEN。

    【讨论】:

    • 谢谢 - 这确实符合我的理解。听到别人确认我的想法会有所帮助。我还发现我可以在调试时使用 sos.dll 中的 'eeheap -loader' 命令获得 JITed 代码的准确计数。对我们来说不幸的是,上述程序只是需要部署的一组客户端程序中的一个。考虑到盈亏平衡点和随后的节省,我们决定此时不追求 ngen。
    猜你喜欢
    • 2011-02-27
    • 2013-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-14
    • 1970-01-01
    • 2021-07-09
    • 2020-09-25
    相关资源
    最近更新 更多