我使用.NET编写的流量控制系统,系统通过TCP连接与外部系统交互,并在不同端点之间路由事务。
我的问题:
在启动/初始化时,私有工作集内存级别约为25000KB。在系统处于空闲状态的初始化之后,私有工作集以每秒约50-100KB的速度加速,直到达到约57000KB的限制。
信息:
系统在增量期间生成页面错误。
当达到限制时,当我连接+300个客户端并交换高频事务几个小时时,私有工作集保持非常稳定并以几MB上下振荡,垃圾收集的逻辑非常有效好。
我用Redgate的一个名为“Memory Profiler”的工具来描述这个系统,它告诉我初始化后的内存是由非托管代码分配的,不幸的是这个分析器不支持深入了解非托管代码分配的内存所以我遇到了困难找出这个分配的内存包含的内容,为什么分配它以及分配内存的代码。
整个代码库是用C#开发的,没有对COM +程序集的引用,也没有与本机Windows API的通信(在此内存增量期间)。
我的问题:
我需要指出正确的方向,找出为什么内存在初始化后以小块连续递增到特定级别。
答案 0 :(得分:1)
如果页面处于不工作状态,则这并不意味着页面仅存储在磁盘或磁盘上。 Windows上的页面可以转到备用列表。如果他们这样做,他们会离开WS并需要软错误来将其带回来。 (我从来不明白为什么会出现这种机制,但确实如此)。软故障很便宜。
使用Process Explorer的系统信息窗口,您可以看到每秒硬故障和软故障的数量。也许还可以使用perfmon。我建议你检查一下你是否有严重的故障(我相信你没有,所以你没有问题,你可以关闭调查)。
此外,WS与内存使用无关,但我认为你已经知道了。