内存(物理和虚拟页面)因未知原因耗尽

内存(物理和虚拟页面)因未知原因耗尽

最近我们的服务器经常挂掉。我怀疑是内存泄漏,但仍然找不到任何可疑之处。事件日志记录了这样的情况:

- <SystemInfo>
  <SystemCommitLimit>49195651072</SystemCommitLimit> 
  <SystemCommitCharge>49195651072</SystemCommitCharge> 
  <ProcessCommitCharge>3172712448</ProcessCommitCharge> 
  <PagedPoolUsage>432541696</PagedPoolUsage> 
  <PhysicalMemorySize>16983396352</PhysicalMemorySize> 
  <PhysicalMemoryUsage>16197967872</PhysicalMemoryUsage> 
  <NonPagedPoolUsage>183476224</NonPagedPoolUsage> 
  <Processes>139</Processes> 
  </SystemInfo>
- <ProcessInfo>

如您所见,SystemCommitCharge 达到了 SystemCommitLimit (~45GB),但 ProcessCommitCharge 仅为 3GB。

我甚至检查了当时使用内存最多的 3 个进程,但它们加起来只使用了大约 1GB。还有大约 100 个进程,但每个进程最多使用 50MB。

Windows 成功诊断出虚拟内存不足的情况。以下程序消耗的虚拟内存最多:sqlservr.exe (4480) 消耗 565637120 字节,mysqld.exe (4500) 消耗 362201088 字节,java.exe (1628) 消耗 314191872 字节。

一切似乎都表明,除了我的进程之外,还有其他东西占用了资源。

我注意到的另一件事是,目前(系统重启后)我们的已分配内存和缓存与正常内存使用量相比增加了很多。但是,当我使用 Rammap 仔细检查时,我发现大多数内存处于待机状态,这意味着它不会影响系统性能。此外,非分页内存现在只有 133MB,所以问题不应该出在驱动程序上。我一无所知。

仔细检查我们的服务器三天,我发现使用的内存在一点一点增加,从:

(8 月 30 日)

使用中 = 3.4 GB 已提交 = 5.3 GB 缓存 = 2.2 GB 分页池 = 225 MB 非分页池 = 76.2 MB

(01/09)

使用中 = 3.9 GB 已提交 = 23.9 GB 缓存 = 11.9 GB 分页池 = 335 MB 非分页池 = 133 MB

有没有办法检测出这个起作用的“神秘因素”?

答案1

您可以使用 Poolmon 检查内存泄漏......

它是 Windows 驱动程序工具包 (WDK) 的一部分。

来自 Microsoft 的一些有用链接:

http://msdn.microsoft.com/en-us/library/ff545405(v=VS.85).aspx

http://msdn.microsoft.com/en-us/library/ff550458.aspx

http://msdn.microsoft.com/en-us/library/ff550442(VS.85).aspx

相关内容