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

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

我的 Windows 2003 Server 运行速度有点慢,提交费用和页面文件使用率不断上升,直到我最终重新启动。要解决这个问题,我需要找出消耗所有内存的原因,这就是最大的谜团所在。

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

Physical Memory (K): 2096400
Commit Charge (K):   5364848
Page file usage:     5.11 GB

好吧,那我们停下来SysInternals 进程浏览器并检查所有正在运行的程序的工作集大小。最大的罪魁祸首是一个使用 121,980K WS、481,284K VM 大小的 Tomcat 实例。其中没有任何内容可以解释 5 GB 的提交费用。

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

SUM (Working Set)  : 681,484 K
SUM (Private Bytes): 593,424 K

我是否从根本上误解了工具所报告的内容?我一直认为,操作系统实际上会占用比进程映射的虚拟内存总量少得多的内存,前提是它实际上不会使用那么多内存,而在这里查看虚拟机只是一种转移注意力的借口。

答案1

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

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

不久前,我们在 Windows 上安装了 Oracle 应用服务器,每天需要重启两次。我们每天在午餐时间和半夜将用户踢出。那是几年前的事了,当时 Oracle 的产品代码据称比较稳定。

答案2

抱歉,只是粘贴一些链接 - 但是我们一直在使用一些技术来查找内存泄漏,使用 logparser 和 powershell,所以我会分享。

http://blogs.msdn.com/debuggingtoolbox/archive/2008/08/22/powershell-script-chart-and-statistics-from-top-20-objects-leaking.aspx

(Never Doubt Thy Debugger 网站非常棒): http://blogs.msdn.com/carloc/archive/2007/09/14/something-you-need-to-know-before-start-debugging.aspx

我还将提供 Mark Russinovich 对 Windows 内存使用情况的精彩见解的链接:

http://blogs.technet.com/markrussinovich/search.aspx?q=memory&p=1

除了提供实际的 Microsoft 案例外,性能团队网站也有很多有用的信息: http://blogs.technet.com/askperf/Default.aspx?p=2

答案3

帮助诊断此问题的主要工具是 perfmon。我首先要查看的计数器是:

内存,已提交字节,这是对虚拟内存需求的度量
;进程,工作集,处于“活动”使用状态的总虚拟内存
;页面文件,正在使用的页面文件百分比
;内存,页面/秒(这并不一定是内存不足的指标,尽管似乎每个人都认为是这样);
内存,页面输出/秒,每秒有多少虚拟内存页面被写入页面文件以释放 RAM 页面帧用于其他用途

内存,缓存字节数
内存,池非分页字节数
内存,池分页字节数
内存,系统代码总字节数
内存,系统驱动程序总字节数

当这个总数接近 2GB 时,您就会遇到性能问题,通常是由于 32 位架构造成的

内存,可用兆字节 - 这衡量了有多少 RAM 可用于满足虚拟内存的需求(新分配,或从页面文件恢复页面)。

也可以看看http://members.shaw.ca/bsanders/WindowsGeneralWeb/RAMVirtualMemoryPageFileEtc.htm

答案4

据说某个地方有一位系统管理员真正了解 Windows 内存统计信息,但我从未见过他们。

但是,找到行为不当的进程通常并不难。尝试使用 Perfmon 查看各种进程计数器,如句柄或页面错误/秒。

JR

进一步思考:你确定你的内存真的不够吗?关键是你是否正在分页。如果没有分页,则说明你的内存不短缺。使用 PerfMon 查看内存 - 页数/秒计数器。

相关内容