如何在运行进程列表之外解释 Windows Server 上的内存使用情况

jpd*_*gle 9 windows windows-server-2003 memory

我有一个运行有点慢的 Windows 2003 服务器,其中提交费用和页面文件使用量不断增加,直到我最终重新启动。为了解决这个问题,我需要找出消耗所有内存的原因,这就是最大的谜团所在。

任务管理器的当前统计数据:

Physical Memory (K): 2096400
Commit Charge (K):   5364848
Page file usage:     5.11 GB
Run Code Online (Sandbox Code Playgroud)

好的,让我们打开SysInternals Process Explorer并检查正在运行的所有内容的工作集大小。最大的罪魁祸首是使用 121,980K WS、481,284K VM 大小的 Tomcat 实例。没有任何内容可以解释 5 GB 的提交费用。

下一步:SysInternals pslist : pslist -m,按列拆分输出并计算报告的 61 个进程的列总和。

SUM (Working Set)  : 681,484 K
SUM (Private Bytes): 593,424 K
Run Code Online (Sandbox Code Playgroud)

我是否从根本上误解了工具报告的内容?我一直认为操作系统实际上提交的内存比进程映射的全部虚拟内存少得多,假设它实际上不会使用那么多,并且在这里查看 VM 是一条红鲱鱼。

Kev*_*n K 1

JP,我相信您关于这是一个运行不稳定代码的自动化构建/单元测试服务器的评论说明了一切。我的猜测是,该服务器需要经常重新启动,因为其上运行的不稳定代码可能存在内存泄漏,从而给您带来所看到的症状。内存泄漏不会列在正在运行的进程的任何进程树上,因为它们是由不再存在的进程占用的内存,并且仍然被分配,即使与它们关联的进程早已消失。

获得一个频繁的维护窗口,允许您自动重新启动这台计算机,可能每晚、每周几次或每周一次,具体取决于此行为开始表现出性能问题的速度。

不久前,我们在 Windoze 上安装了 Oracle 应用服务器,每天需要重新启动两次。我们每天都会在午餐时间和半夜把用户踢出去。那是几年前的事了,当时 Oracle 提供了据称稳定的生产代码。