如何在 Windows 7 中查找内存泄漏的源头?

如何在 Windows 7 中查找内存泄漏的源头?

我有一台 Windows 7 机器,内存一直不足。我可以看到空闲的内存在几个小时内逐渐减少,直到机器变得无响应。我检查了进程列表,没有一个进程占用那么多内存。

我还检查了每个进程的句柄数和其他各种指标,但仍然找不到机器耗尽内存的原因。

有没有什么好的方法可以检查Windows中内存的使用情况?

编辑

tasklist这是机器无响应前几分钟的结果:

Image Name                     PID Session Name        Session#    Mem Usage
========================= ======== ================ =========== ============
System Idle Process              0 Services                   0         24 K
System                           4 Services                   0        300 K
smss.exe                       196 Services                   0      1,024 K
csrss.exe                      272 Services                   0      4,336 K
wininit.exe                    320 Services                   0      4,184 K
csrss.exe                      332 Console                    1      3,516 K
winlogon.exe                   372 Console                    1      6,316 K
services.exe                   416 Services                   0      8,112 K
lsass.exe                      432 Services                   0     10,088 K
lsm.exe                        440 Services                   0      3,664 K
svchost.exe                    548 Services                   0      8,152 K
svchost.exe                    620 Services                   0      6,564 K
svchost.exe                    660 Services                   0     15,764 K
LogonUI.exe                    724 Console                    1     18,428 K
svchost.exe                    768 Services                   0      7,992 K
svchost.exe                    828 Services                   0      9,724 K
svchost.exe                    852 Services                   0     28,092 K
svchost.exe                    176 Services                   0     13,096 K
spoolsv.exe                    824 Services                   0     10,608 K
svchost.exe                    952 Services                   0     11,632 K
svchost.exe                   1076 Services                   0      8,524 K
fshoster32.exe                1120 Services                   0      9,148 K
fsorsp.exe                    1200 Services                   0      8,036 K
fsgk32.exe                    1324 Services                   0      3,084 K
cygrunsrv.exe                 1552 Services                   0      5,852 K
conhost.exe                   1864 Services                   0      2,996 K
sshd.exe                      1896 Services                   0      7,804 K
FSMA32.EXE                    2024 Services                   0      1,628 K
svchost.exe                   1320 Services                   0      5,092 K
fssm32.exe                    1704 Services                   0      2,196 K
FSHDLL64.EXE                  2120 Services                   0        644 K
SearchIndexer.exe             3260 Services                   0     13,596 K
sshd.exe                    138920 Services                   0      8,696 K
sshd.exe                    138448 Services                   0      8,696 K
sshd.exe                    138660 Services                   0      8,696 K
bash.exe                    137924 Services                   0      5,380 K
bash.exe                    137820 Services                   0      3,832 K
SAV32CLI.EXE                136344 Services                   0    133,868 K
WmiPrvSE.exe                139444 Services                   0      7,168 K
sshd.exe                    139672 Services                   0      8,692 K
sshd.exe                    139876 Services                   0      8,684 K
bash.exe                    139992 Services                   0      5,432 K
bash.exe                    140040 Services                   0      3,996 K
bash.exe                    140200 Services                   0      5,400 K
bash.exe                    139424 Services                   0      4,048 K
typeperf.exe                139300 Services                   0      5,372 K
sleep.exe                   138268 Services                   0      2,272 K
sshd.exe                    139612 Services                   0      7,168 K
sshd.exe                    137720 Services                   0      5,700 K
bash.exe                    139524 Services                   0      5,304 K
bash.exe                    138952 Services                   0      3,756 K
tasklist.exe                137580 Services                   0      5,164 K
bash.exe                    139460 Services                   0      5,452 K
bash.exe                    139796 Services                   0        104 K

此时,wmic OS get FreePhysicalMemory /Value报告显示 2GB 内存中大约有 400 MB 可用。

RamMap:

在此处输入图片描述

任务管理器:

在此处输入图片描述

答案1

高内存使用率源于高页表使用情况。要查看哪些进程使用了​​它,安装 Windows 性能工具包,以管理员身份打开命令提示符并运行以下命令:

xperf -on ReferenceSet -BufferSize 1024 -MaxFile 512 -FileMode Circular  && timeout 5 && xperf -d MemUsage.etl

使用 Windows 性能分析器 (WPA.exe)打开MemUsage.etl,将图形“ResidentSet”从左侧图形列表拖放到分析窗格:

在此处输入图片描述

现在将“页面类别”列移到左侧并展开“页面表”条目:

在此处输入图片描述

这里您可以看到页表使用率较高的进程。在右侧(蓝线之后),您可以看到每个进程的页表内存使用率(以 MB 为单位)。

答案2

我在这里看到的唯一“奇怪”的事情是这些:

  • 你有一个名为的进程,scan.exe它现在占用了 98% 的 CPU
  • 您有一个名为的进程fssm32.exe,它有 9 百万个页面错误。fssm32.exe看起来像是来自 f-secure 病毒扫描程序的程序。
  • 您还有一个名为 的进程SAV32CLI.EXE,它占用了另外 130mb+ 的内存。看起来您觉得同时运行 2 个病毒扫描程序:f-secure 和 sophos 会更有保护效果。

rammap-screenshot 对我来说看起来没问题:你有一个~400mb 的缓存文件池,其中 85mb 处于活动使用状态,300mb+ 处于待机模式(这意味着只要你需要更多 RAM,它们就会被释放)。查看你的 sshd.exe 和 bash.exe 进程的数量,这看起来也是合法的。

了解 Windows 如何管理内存的内部工作原理的最佳方式是观看以下演讲:http://channel9.msdn.com/Events/TechEd/NorthAmerica/2011/WCL405.. 您已经在使用演讲者开发的一些工具。

相关内容