全新安装并启动 OS Windows x64 后,我启动了 cmd.exe(任何其他 exe)并关闭了它。然后我启动 rammap.exe ( http://technet.microsoft.com/en-us/sysinternals/ff700229.aspx )。在名为“进程”的第二页上,我按进程名称对列表进行了排序,看到 cmd.exe 仍然消耗内存(4K 私有和 16K 页表 = 20K)。我第二次启动它,新项目出现在这个列表中(每个进程启动+终止一个)。因此,每个进程终止都会占用 20K 的内存。
如果您的软件经常在此类服务器操作系统上启动和终止进程,您会发现几天或几周后操作系统开始显示奇怪的错误(通常是关于内存不足)。几天后,您要做的就是重新启动操作系统。重新启动后,它在几乎相同的时间段内都可以正常工作。
我在每个 2008 服务器 R2 x64(+SP1 和 -SP1)上都注册了这个问题,并在 2003 服务器 x64 上间接(不支持 rammap)。
在 Windows 7 x32(+SP1 和 -SP1)上未观察到该问题。
截屏
看这个问题探索的第一步页表快速增长
任何人都可以反驳或批准我的假设和观察吗?谁能告诉如何解决这种行为?这是错误还是不是?
不久前我发现了一个非常有趣的工具RamMap。我在几台运行我们 x32 软件的服务器上发现 PAGE TABLE 增长非常快——每天 1.2 GB(总共 10 GB)。此外,NONPAGED POOL 每天增长 300MB。
我们有称为1C(俄罗斯商业导向平台)的编程和执行平台。一个进程就像其他进程的管理器,它们按计划启动并由规则终止,并执行不同类型的数据处理,包括使用 COM 与另一个数据库交换。换句话说,我不知道平台级别发生了什么(它对我们隐藏)。我们从平台开发人员那里得到了一些不快 (=)) 的支持——他们仍然没有回答我们关于这个问题的问题。
我们有不同的操作系统配置(2003 和 2008 服务器、x32 和 x64)。页表随处增长。增长速度与同时运行的进程数成正比(在主服务器 30-40 上)。当 PAGE TABLE 达到 RAM 的 50-70% 时,服务器开始以不同的方式出现故障。