我有16GB的系统RAM。启动时,没有打开任何应用程序,除了任务管理器,Windows使用的内存约为3gb。我查看了“进程”选项卡,但似乎没有什么异常。我如何找出为什么我的Windows使用如此多的RAM。
所有用户的所有流程
从poolmon中读取的内容似乎是我的无线Broadcom驱动程序正在使用约0.4GB的RAM。即使我删除它,在启动时仍将使用2.6GB,这仍然太多了。
重新安装与内存泄漏相关的无线驱动程序后。我有一个新的屏幕截图,并想确认这确实是内存泄漏。
我有16GB的系统RAM。启动时,没有打开任何应用程序,除了任务管理器,Windows使用的内存约为3gb。我查看了“进程”选项卡,但似乎没有什么异常。我如何找出为什么我的Windows使用如此多的RAM。
所有用户的所有流程
从poolmon中读取的内容似乎是我的无线Broadcom驱动程序正在使用约0.4GB的RAM。即使我删除它,在启动时仍将使用2.6GB,这仍然太多了。
重新安装与内存泄漏相关的无线驱动程序后。我有一个新的屏幕截图,并想确认这确实是内存泄漏。
Answers:
您有驱动程序引起的内存泄漏。查看非分页内核内存的高价值。您的情况是3.7 GB以上。您可以使用poolmon查看哪个驱动程序导致了高使用率。
安装Windows WDK,运行poolmon,通过P在pool type之后对它进行排序,以便非分页位于顶部,并B在afterbytes 之后,以查看使用最多内存的标记。通过转到WDK的安装文件夹来运行poolmon,转到“工具”(或C:\ Program Files(x86)\ Windows Kits \ 10 \ Tools \ x64),然后单击poolmon.exe。
现在查看哪个pooltag使用最多的内存,如下所示:
现在打开一个cmd提示符并运行findstr命令。为此,请打开cmd提示符,然后键入“ cd C:\ Windows \ System32 \ drivers”(不带引号)。然后键入“ findstr / s __ 。 ”,其中__是标记(poolmon中最左边的名称)。这样做看哪个驱动程序使用此标记:
现在,转到驱动程序文件夹(C:\ Windows \ System32 \ drivers)并右键单击有问题的驱动程序(上图示例中的intmsd.sys)。单击属性,转到详细信息选项卡以找到产品名称。寻找该产品的更新。
如果pooltag仅显示Windows驱动程序或在pooltag.txt("C:\Program Files (x86)\Windows Kits\8.1\Debuggers\x64\triage\pooltag.txt"
)中列出
您已经使用xperf来跟踪导致使用的原因。从Windows SDK安装WPT,以管理员身份打开cmd.exe并运行以下命令:
xperf-在PROC_THREAD + LOADER + POOL -stackwalk PoolAlloc + PoolFree + PoolAllocSession + PoolFreeSession -BufferSize 2048 -MaxFile 1024 -FileMode循环&&超时-1 && xperf -d C:\ pool.etl
捕获30 -60秒的生长时间。使用WPA.exe打开ETL,将“池”图添加到分析窗格中。
将pooltag列放在第一位,然后添加stack列。现在,将符号加载到 WPA.exe中,并扩展您在poolmon中看到的标签的堆栈。
现在,您可以在堆栈中找到其他第三方驱动程序。此处,Thre
标签(Thread)由G-Data的AVKCl.exe使用。寻找驱动程序/程序更新以对其进行修复。
好吧,首先,在我给出更详细的答案之前。在第一个屏幕截图中,非页面缓冲池(一种内核内存使用量)为1.3GB。对我来说,这似乎异常高,尤其是开机后仅30分钟。我想我可能会看到NP Pool在长时间使用后或程序像筛子一样漏水时变得越来越高。相比之下,我的NP池通常在100到200兆字节之间,而我的页面缓冲池可能高达400或500(这是在我的系统运行了数周而没有重新引导之后)。
通过右键单击列标题,然后选择选择列,可以在任务管理器中启用一些其他列。您应该添加Working Set (private)
,Working Set (shared)
,Commit
,和NP Pool
。我会仔细检查所有用户的所有进程,看是否有一个NP Pool超过256KB。如果您发现任何问题,尤其是那些更高的问题,则可能是问题的根源,或者至少是部分问题。
您的总工作集(一个进程使用的物理内存量)是私有工作集和共享工作集(WS)的组合。对于大多数进程而言,私有通常更大,但是可能有些进程使用大量共享的WS。两者通常应合计为总WS。提交是已提交给后备存储的工作集数量(在大多数情况下为Windows页面文件)。后台应用程序通常比WS具有更大的Commit,这表明它们的许多页面缓冲池已被交换出内存并进入了页面文件(这对于已最小化且一段时间不使用的桌面应用程序是很正常的)。
非页面缓冲池是无法(也永远不会)从物理内存中交换出来的内存...实际上是永久性的最小物理内存使用量。NP池内存通常包含程序代码和关键部分,必须在物理内存中才能正确或安全地运行它们,特殊堆等。在60个进程中,如果所有进程都具有256KB NP池内存,则您的绝对最低物理内存使用量大约为15,360KB。在大多数情况下,一个或两个应用程序可能具有256KB NP池,而大多数应用程序具有更少,经常更少(或没有)。系统极不可能将所有进程工作集的全部页面调出,因此永远不要期望内存使用率会降低。
最后,拥有更多内存的目的是避免必须在物理磁盘上的扩展内存空间(交换,页面文件)之间进行数据分页。分页是一个过程,涉及到处移动已分配的物理内存块,将其中的一些块推入磁盘,然后将其他部分从磁盘带入物理内存。为了简单起见,分页非常不受欢迎。它本身并不是“坏”的东西,但是当它出现得太频繁时,可能会真正拖累性能。增加系统中总物理RAM的最终目的是允许更多进程将其更多提交保留在物理内存中(更大的工作集)。消耗内存不是问题,而且当更多执行进程使用更多内存时,总体系统性能和活动进程性能通常会更高,
Windows为您管理内存,并自动为您在页面(交换)文件之间来回调入和调出数据。如果您运行一个需要9GB内存的进程,而您的系统已经在使用4GB(12GB的内存),那么系统将自动找出哪些进程不需要立即访问其整个工作集,它将分页部分或全部的页面缓冲池中的一部分进行交换以释放多余的1GB。如果大型进程最终需要更多的内存,则Windows将进一步减少其他进程的工作集,直到它具有足够的可用空间来分配新请求的块。您的大型进程最终可能会消耗掉NP Pool之外的所有可用内存,并且可能会为周期性执行进程带来一些额外的最小开销,这些开销不允许Windows释放更多的工作集(i。e。它们具有Windows可能会交换出物理内存的挂起页面错误,但是由于正在请求它们,因此无法移动它们。)
如果一个进程需要的内存多于允许访问的内存(使用增强技术,32位进程通常可以访问2Gb,有些则少于4Gb,而每个64bit进程通常可以访问大约48Gb的内存),则Windows有时会尝试使用交换空间虚拟化其内存。如果32位应用程序要使用其允许的最大2Gb空间,但只有1.2Gb可用,则Windows将在页面文件中保留完整的2Gb,并根据需要将进程自己的数据移入和移出页面文件,以便支持应用程序的内存使用情况。在进行“总提交”时,这种情况下的总“内存”使用量似乎大于可用的物理内存。总提交通常以页面文件的总大小最大,在由系统管理时,通常为物理内存量的2-3倍。就你而言
最后一点。您在回答中说您拥有16Gb RAM,而“任务管理器”仅看到12Gb RAM。这里有两件事之一。您的系统实际上只只有12Gb的RAM,或者您的一根摇杆未正确注册。如果有一根公羊棍(我假设是4个4Gb棍),则可能是坏的,可能无法完全正确地放置在您的主板中,或者您的主板可能存在内存检测问题。
要检查是否是后者,您应该首先将主板BIOS更新到最新版本。我有一个类似的问题...我的六根三通道DDR3 ram内存条(6x 2Gb)都很好,这是基于对每一个进行单独测试而得出的...但是我的主板随机决定不经常计数一次或两次,通常只剩下8Gb的内存。BIOS更新解决了该问题,现在我可以可靠地访问所有12Gb内存。
我如何找出为什么我的Windows使用如此多的RAM。
它使用了如此多的RAM,因为它是设计用来这样做的。使用RAM绝对没有成本。实际上,使用的RAM优于可用的RAM,因为操作系统无需执行任何操作即可使用它。使用空闲RAM需要使用它,这需要付出很多努力。
如果您在考虑“我现在希望释放RAM,以便以后使用”,请不要理会。RAM不必立即释放以供以后使用。现在,您可以使用它,并在以后使用它。这里没有权衡取舍-使用RAM绝对没有缺点。
RAM保持使用状态,可以直接从一种用途切换到另一种用途,而不必费心去释放它,而只需要再次使用它。现代操作系统只有在别无选择时才会释放RAM。
“Why is Windows using RAM?”
,问题是:“Why do the RAM usage numbers not add up; why is one part reporting a higher usage than another part?”
此帖子充其量应该是评论,因为它没有解决实际的问题,甚至没有尝试回答它。这样做只会带来一些建议,而糟糕的建议是,因为如果OP按照建议忽略了它,则不会发现内存泄漏。