如何确定我的Windows服务器是否正在交换?


29

我正在使用Process Explorer监视Windows Server,同时它重建了一些数据。这主要是一个占用大量CPU的进程,但是我想确保它没有交换。如何确定它是否正在使用Process Explorer?我最初的猜测是在“系统信息”窗口中,它是“分页文件写入增量”。是?没有?我是个白痴?

*截屏不是服务器的……只是一个例子。

替代文字http://www.malwareinfo.org/bootcamp/img/ProcessExplorer2.jpg

Answers:


30

“页面输入/秒是值得关注的计数器,但您不必担心它会“交换”,因为Windows不会像* nixes那样使用页面文件。

首先,您需要了解Windows页面不能进入。我将引用Eric Lipperts博客文章(轻度编辑)的相关部分,因为我自己无法说得更好:

“ RAM可以看作仅仅是性能优化。访问RAM中的数据时,信息存储在以接近光速传播的电场中,比访问磁盘中的信息所存储的信息要大得多,繁重黑色金属分子

操作系统会跟踪最常访问哪个进程的存储的哪些页面,并在RAM中进行复制,以提高速度。当进程访问与当前未在RAM中缓存的页面相对应的指针时,操作系统会执行“页面错误”,转到磁盘,然后将页面的副本从磁盘复制到RAM,这是合理的假设即将在不久后再次访问它。

操作系统在共享只读资源方面也非常聪明。如果两个进程都从同一个DLL加载同一页代码,则操作系统可以在两个进程之间共享RAM缓存。由于代码可能不会被任何一个进程更改,因此通过共享来保存重复的RAM页面是非常明智的。

但是即使进行了巧妙的共享,最终该缓存系统也将用完RAM。发生这种情况时,操作系统会猜测一下哪些页面最有可能很快无法再次访问,如果它们已更改,则将它们写到磁盘中,并释放该RAM以读取更可能再次访问的内容不久。

当操作系统猜测不正确时,或者更有可能是,当RAM不足以存储所有正在运行的进程中所有经常访问的页面时,计算机将开始“崩溃”。操作系统将所有时间都花在写入和读取昂贵的磁盘存储上,磁盘持续运行,并且您无法完成任何工作。

这也意味着“ RAM不足”很少会导致“内存不足”错误。而不是错误,它会导致性能下降,因为存储实际上在磁盘上这一事实的全部成本突然变得很重要。

另一种看待这种情况的方式是,程序消耗的虚拟内存总量实际上与它的性能没有太大关系。重要的不是消耗的虚拟内存总量,而是(1)不与其他进程共享多少内存,(2)常用页面的“工作集”有多大,以及( 3)所有活动进程的工作集是否大于可用的RAM。

到目前为止,应该很清楚为什么“内存不足”错误通常与您拥有多少物理内存或什至有多少可用存储空间无关。它几乎总是与地址空间有关,在32位Windows上,该地址空间相对较小并且很容易分散。”

其他几点:

  1. dll和程序文件始终仅被调入,而不会被调出,因为它们已经在磁盘上了(通常在物理内存变低时释放第一页)
  2. 与其他任何内存问题(除了已经提到的总体性能不佳之外)相比,您更有可能耗尽可用页表条目或内存严重崩溃
  3. 即使没有页面文件运行,您仍然会遇到页面错误
  4. 一般来说,查看已提交的内存可以更好地说明进程如何使用内存

有关Windows中内存管理工作原理的完整图片,请参见

Windows NT中的虚拟内存管理器

如果您认为您遇到内存问题,我建议您先观看有关Windows内存故障排除的演示文稿

这是一个很好的解释,为什么有时在不感谢内存碎片的情况下会出现“内存不足”的情况:

另请参阅突破Windows的限制:物理内存

有关虚拟内存,内存碎片和泄漏以及WOW64的更多信息

RAM,虚拟内存,页面文件等所有内容(Microsoft支持)

更新:

Windows 10对内存的处理有些不同,随着时间的流逝,您将看到一个名为“系统和压缩内存”的过程。Windows10将“压缩存储”添加到分页列表中。该内存是系统拥有的USER内存(通常系统仅具有内核内存)。此内存被压缩到位,平均减少到大约30%。这样可以将更多页面存储在内存中(对于那些进行数学运算的用户,其空间增加了70%)请注意,如果内存仍然有压力,则可以将压缩存储中的页面(用户模式系统进程空间)放在已修改的页面上。列表(压缩),然后可以将其写入物理页面文件。系统将在系统用户模式空间中看到它们并对其进行压缩,并且不会尝试将它们放回存储中。因此,在Windows 10系统上,看起来系统正在吸入ram,但实际上,它只是在尝试更有效地使用ram。自2013年以来,Mac用户一直在使用类似的功能,而较新版本的Linux内核采用了版本的内存压缩。这种节省内存的方法不仅更好,而且在其他操作系统中也很常见。


6

是的,分页增量可以实时指示服务器正在分页(或“交换”)多少,但仅在那时。为了更仔细地观察和查看历史视图,我建议使用性能监视器(perfmon.exe来绘制或记录这些增量(以及可能有助于将特定事件或活动与峰值相关联的任何其他性能计数器)。分页活动)。


5

性能监视器(性能监视器)是您的朋友。您正在寻找硬页面错误(即,必须从磁盘读取满足请求所需的内存页面时的页面错误),因此监视硬页面错误和软页面错误都是次优的。

使用perfmon观察“内存”对象中的“每秒页面输入数”计数器,以了解发生了多少硬页面错误。


0

一个好的经验法则是,如果您的提交费用高于物理内存,则您肯定在分页某些内容,但是如果您的应用程序使用始终保持使用状态的单个固定数据缓冲区,则通常不会分页完全没有。启动其他内存以腾出空间来启动时,可能会有些延迟。


3
MH:我不确定我是否同意你的经验法则。如果承诺费比物理内存越高,简单的说就是东西在某些时候分页,但系统并不一定仍然分页东西。仅当发生页面错误时,某些内容才会被调出。否则,我同意最好使用单个固定数据缓冲区,但是我认为我们可能正在进入stackoverflow.com的领域
Jessica McKinnon,2009年

不好意思,我应该说“过去已经交换了某些东西,将来的内存请求也将需要交换”。
Maximus Minimus,

这不一定是正确的,应用程序只能将具有该OS特权的页面锁定在其内存中。
吉姆B
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.