2

我使用一个用 .NET 编写的流控制系统,该系统通过 TCP 连接与外部系统交互,并在不同端点之间路由事务。

我的问题:

在启动/初始化时,私有工作集内存级别约为 25000KB。在系统处于空闲状态时初始化后,私有工作集以大约每秒 50-100KB 的速度递增,直到达到大约 57000KB 的限制。

信息:

系统在增量期间生成页面错误。

当达到限制时,当我连接 +300 个客户端并交换几个小时的高频事务时,私有工作集保持非常稳定并以几 MB 上下波动,垃圾收集的逻辑非常有效。

我已经使用 Redgate 的一个名为“Memory Profiler”的工具对这个系统进行了分析,它告诉我在初始化后内存增加是由非托管代码分配的,不幸的是,这个分析器不支持对非托管代码分配的内存的洞察,所以我很难找出分配的内存包含什么,分配的原因以及分配内存的代码。

整个代码库是用 C# 开发的,没有对 COM+ 程序集的引用,也没有与本机 Windows API 的通信(在此内存的增量期间)。

我的问题:

我需要指出正确的方向,以找出为什么内存在初始化后以小块连续递增到特定级别。

4

1 回答 1

1

如果页面不在工作集中,这并不意味着该页面仅存储在磁盘上或根本存储在磁盘上。Windows 上的页面可以进入待机列表。如果他们这样做了,他们就会离开 WS 并需要一个软故障才能将他们带回来。(我从来不明白为什么会有这种机制,但确实如此)。软故障很便宜。

使用 Process Explorer 的系统信息窗口,您可以查看每秒硬故障和软故障的数量。可能也可以使用 perfmon。我建议你检查你是否有硬故障(我相信你没有,所以你没有问题,你可以结束调查)。

此外,WS 与内存使用无关,但我想你已经知道了。

于 2013-02-28T12:30:52.837 回答