我有一台 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.. 您已经在使用演讲者开发的一些工具。